diff --git a/test/associations_test.cpp b/test/associations_test.cpp
index 6515ee3..8254838 100644
--- a/test/associations_test.cpp
+++ b/test/associations_test.cpp
@@ -141,8 +141,7 @@
 class AssocsTest : public ::testing::Test
 {
   protected:
-    AssocsTest() : ::testing::Test(), bus(sdbusplus::bus::new_default())
-    {}
+    AssocsTest() : ::testing::Test(), bus(sdbusplus::bus::new_default()) {}
 
     fs::path jsonDir;
     sdbusplus::bus_t bus;
diff --git a/test/interface_ops_test.cpp b/test/interface_ops_test.cpp
index b6d6ac8..1fb15ed 100644
--- a/test/interface_ops_test.cpp
+++ b/test/interface_ops_test.cpp
@@ -121,8 +121,8 @@
     EXPECT_CALL(mock, constructWithProperties(_, _, _)).Times(0);
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i,
+                                                                false);
 
     EXPECT_NO_THROW(
         std::any_cast<std::shared_ptr<DummyInterfaceWithoutProperties>>(r));
@@ -138,8 +138,8 @@
     EXPECT_CALL(mock, constructWithProperties(_, _, _)).Times(0);
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i,
+                                                                false);
 
     EXPECT_NO_THROW(
         std::any_cast<std::shared_ptr<DummyInterfaceWithoutProperties>>(r));
@@ -155,8 +155,8 @@
     EXPECT_CALL(mock, constructWithProperties("bar", _, _)).Times(1);
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithProperties>::op(b, "bar", i, false);
+    auto r = MakeInterface<DummyInterfaceWithProperties>::op(b, "bar", i,
+                                                             false);
 
     EXPECT_NO_THROW(
         std::any_cast<std::shared_ptr<DummyInterfaceWithProperties>>(r));
@@ -172,8 +172,8 @@
     EXPECT_CALL(mock, constructWithProperties("foo", _, _)).Times(1);
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i,
+                                                             false);
 
     EXPECT_NO_THROW(
         std::any_cast<std::shared_ptr<DummyInterfaceWithProperties>>(r));
@@ -188,8 +188,8 @@
     EXPECT_CALL(mock, setPropertyByName(_, _, _)).Times(0);
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i,
+                                                                false);
 
     AssignInterface<DummyInterfaceWithoutProperties>::op(i, r, false);
 }
@@ -203,8 +203,8 @@
     EXPECT_CALL(mock, setPropertyByName(_, _, _)).Times(0);
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i,
+                                                                false);
 
     AssignInterface<DummyInterfaceWithoutProperties>::op(i, r, false);
 }
@@ -218,8 +218,8 @@
     EXPECT_CALL(mock, setPropertyByName(_, _, _)).Times(0);
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i,
+                                                             false);
 
     AssignInterface<DummyInterfaceWithProperties>::op(i, r, false);
 }
@@ -233,8 +233,8 @@
     EXPECT_CALL(mock, setPropertyByName("foo"s, 1ll, _)).Times(1);
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithProperties>::op(b, "bar", i, false);
+    auto r = MakeInterface<DummyInterfaceWithProperties>::op(b, "bar", i,
+                                                             false);
 
     AssignInterface<DummyInterfaceWithProperties>::op(i, r, false);
 }
@@ -246,8 +246,8 @@
     sdbusplus::SdBusMock interface;
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i,
+                                                                false);
 
     EXPECT_CALL(mock, serializeTwoArgs("/foo"s, "bar"s)).Times(1);
 
@@ -262,8 +262,8 @@
     sdbusplus::SdBusMock interface;
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i,
+                                                                false);
 
     EXPECT_CALL(mock, serializeTwoArgs("/foo"s, "bar"s)).Times(1);
 
@@ -278,8 +278,8 @@
     sdbusplus::SdBusMock interface;
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i,
+                                                             false);
 
     EXPECT_CALL(mock, serializeThreeArgs("/foo"s, "bar"s, _)).Times(1);
 
@@ -294,8 +294,8 @@
     sdbusplus::SdBusMock interface;
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i,
+                                                             false);
 
     EXPECT_CALL(mock, serializeThreeArgs("/foo"s, "bar"s, _)).Times(1);
 
@@ -310,8 +310,8 @@
     sdbusplus::SdBusMock interface;
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i,
+                                                                false);
 
     EXPECT_CALL(mock, deserializeNoop()).Times(1);
 
@@ -326,8 +326,8 @@
     sdbusplus::SdBusMock interface;
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithoutProperties>::op(b, "foo", i,
+                                                                false);
 
     EXPECT_CALL(mock, deserializeNoop()).Times(1);
 
@@ -342,8 +342,8 @@
     sdbusplus::SdBusMock interface;
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i,
+                                                             false);
 
     EXPECT_CALL(mock, deserializeThreeArgs("/foo"s, "bar"s, _)).Times(1);
 
@@ -358,8 +358,8 @@
     sdbusplus::SdBusMock interface;
 
     auto b = sdbusplus::get_mocked_new(&interface);
-    auto r =
-        MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i, false);
+    auto r = MakeInterface<DummyInterfaceWithProperties>::op(b, "foo", i,
+                                                             false);
 
     EXPECT_CALL(mock, deserializeThreeArgs("/foo"s, "bar"s, _)).Times(1);
 
diff --git a/test/types_test.cpp b/test/types_test.cpp
index dabcd9a..b365dc3 100644
--- a/test/types_test.cpp
+++ b/test/types_test.cpp
@@ -8,21 +8,12 @@
 struct Empty
 {};
 
-void functionUsingInterfaceVariantType(InterfaceVariantType&)
-{}
-void functionUsingInterfaceType(InterfaceType<Empty>&)
-{}
-void functionUsingObjectType(ObjectType<Empty>&)
-{}
-void functionUsingInterface(Interface&)
-{}
-void functionUsingObject(Object&)
-{}
-void functionUsingAction(Action&)
-{}
-void functionUsingFilter(Filter&)
-{}
-void functionUsingPathCondition(PathCondition&)
-{}
-void functionUsingGetProperty(GetProperty<Empty>&)
-{}
+void functionUsingInterfaceVariantType(InterfaceVariantType&) {}
+void functionUsingInterfaceType(InterfaceType<Empty>&) {}
+void functionUsingObjectType(ObjectType<Empty>&) {}
+void functionUsingInterface(Interface&) {}
+void functionUsingObject(Object&) {}
+void functionUsingAction(Action&) {}
+void functionUsingFilter(Filter&) {}
+void functionUsingPathCondition(PathCondition&) {}
+void functionUsingGetProperty(GetProperty<Empty>&) {}
