diff --git a/src/test/pathgentest.cpp b/src/test/pathgentest.cpp
index 9e0e073..21c2084 100644
--- a/src/test/pathgentest.cpp
+++ b/src/test/pathgentest.cpp
@@ -113,13 +113,13 @@
     size_t i;
     for (i = 0; i < expectedPathMeta.size(); ++i)
     {
-        const auto& path = std::get<0>(pathMeta[i]).get();
+        const auto& oriPath = std::get<0>(pathMeta[i]).get();
         const auto& expPath = std::get<0>(expectedPathMeta[i]).get();
-        const auto& meta = std::get<1>(pathMeta[i]).get();
+        const auto& oriMeta = std::get<1>(pathMeta[i]).get();
         const auto& expMeta = std::get<1>(expectedPathMeta[i]).get();
 
-        ASSERT_EQ(path, expPath);
-        ASSERT_EQ(meta, expMeta);
+        ASSERT_EQ(oriPath, expPath);
+        ASSERT_EQ(oriMeta, expMeta);
     }
 }
 
diff --git a/src/test/propertygentest.cpp b/src/test/propertygentest.cpp
index 4124246..6a1e2c8 100644
--- a/src/test/propertygentest.cpp
+++ b/src/test/propertygentest.cpp
@@ -130,9 +130,10 @@
             const auto& actualProperty = std::get<1>(groups[i][j]).get();
             ASSERT_EQ(expectedProperty, actualProperty);
 
-            const auto& expectedMeta = std::get<1>(expectedGroups[i][j]).get();
-            const auto& actualMeta = std::get<1>(groups[i][j]).get();
-            ASSERT_EQ(expectedMeta, actualMeta);
+            const auto& retExpectedMeta =
+                std::get<1>(expectedGroups[i][j]).get();
+            const auto& retActualMeta = std::get<1>(groups[i][j]).get();
+            ASSERT_EQ(retExpectedMeta, retActualMeta);
         }
     }
 }
diff --git a/src/test/propertywatchtest.cpp b/src/test/propertywatchtest.cpp
index 1df64fb..a1d827e 100644
--- a/src/test/propertywatchtest.cpp
+++ b/src/test/propertywatchtest.cpp
@@ -260,9 +260,9 @@
     for (const auto& o : convert(watchIndex))
     {
         const auto& path = o.first.get();
-        const auto& interfaces = o.second;
+        const auto& tmpInterfaces = o.second;
         std::vector<std::string> mapperResponse;
-        std::transform(interfaces.begin(), interfaces.end(),
+        std::transform(tmpInterfaces.begin(), tmpInterfaces.end(),
                        std::back_inserter(mapperResponse),
                        // *INDENT-OFF*
                        [](const auto& item) { return item.first; });
@@ -274,10 +274,10 @@
         EXPECT_CALL(
             dbus, fwdAddMatch(
                       sdbusplus::bus::match::rules::interfacesAdded(path), _));
-        for (const auto& i : interfaces)
+        for (const auto& i : tmpInterfaces)
         {
             const auto& interface = i.first.get();
-            const auto& properties = i.second;
+            const auto& tmpProperties = i.second;
             EXPECT_CALL(
                 dbus,
                 fwdAddMatch(sdbusplus::bus::match::rules::propertiesChanged(
@@ -285,7 +285,7 @@
                             _));
 
             PropertiesChanged<T> serviceResponse;
-            for (const auto& p : properties)
+            for (const auto& p : tmpProperties)
             {
                 serviceResponse[p] = Values<T>::get(ndx);
                 ++ndx;
