diff --git a/test/test_snmp_conf_manager.cpp b/test/test_snmp_conf_manager.cpp
index a681f21..f6111f7 100644
--- a/test/test_snmp_conf_manager.cpp
+++ b/test/test_snmp_conf_manager.cpp
@@ -12,13 +12,16 @@
 namespace snmp
 {
 
+auto managerObjPath = "/xyz/openbmc_test/snmp/manager";
+
 class TestSNMPConfManager : public testing::Test
 {
   public:
     sdbusplus::bus::bus bus;
     ConfManager manager;
     std::string confDir;
-    TestSNMPConfManager() : bus(sdbusplus::bus::new_default()), manager(bus, "")
+    TestSNMPConfManager() :
+        bus(sdbusplus::bus::new_default()), manager(bus, managerObjPath)
     {
         char tmp[] = "/tmp/snmpManager.XXXXXX";
         std::string confDir = mkdtemp(tmp);
@@ -30,9 +33,9 @@
         fs::remove_all(manager.dbusPersistentLocation);
     }
 
-    void createSNMPClient(std::string ipaddress, uint16_t port)
+    std::string createSNMPClient(std::string ipaddress, uint16_t port)
     {
-        manager.client(ipaddress, port);
+        return manager.client(ipaddress, port);
     }
 
     ClientList &getSNMPClients()
@@ -40,52 +43,86 @@
         return manager.clients;
     }
 
+    bool isClientExist(const std::string &ipaddress)
+    {
+        for (const auto &val : manager.clients)
+        {
+            if (val.second.get()->address() == ipaddress)
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
     void deleteSNMPClient(std::string ipaddress)
     {
-        auto &it = manager.clients[ipaddress];
-        it->delete_();
+        for (const auto &val : manager.clients)
+        {
+            if (val.second.get()->address() == ipaddress)
+            {
+                val.second.get()->delete_();
+            }
+        }
     }
 };
 
 // Add single SNMP client
 TEST_F(TestSNMPConfManager, AddSNMPClient)
 {
-    using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+    // check the created object path
+    auto path = createSNMPClient("192.168.1.1", 24);
+    std::string expectedPath = managerObjPath;
+    expectedPath += std::string("/1");
 
-    createSNMPClient("192.168.1.1", 24);
+    EXPECT_EQ(path, expectedPath);
 
+    // check whether the client created
     auto &clients = getSNMPClients();
     EXPECT_EQ(1, clients.size());
-    EXPECT_EQ(true, clients.find("192.168.1.1") != clients.end());
+    EXPECT_EQ(true, isClientExist("192.168.1.1"));
 }
 
 // Add multiple SNMP client
 TEST_F(TestSNMPConfManager, AddMultipleSNMPClient)
 {
-    using namespace sdbusplus::xyz::openbmc_project::Common::Error;
-
+    // add multiple clients and check whether the object path is generated
+    // correctly.
     createSNMPClient("192.168.1.1", 24);
-    createSNMPClient("192.168.1.2", 24);
+    auto path = createSNMPClient("192.168.1.2", 24);
+    std::string expectedPath = managerObjPath;
+    expectedPath += std::string("/2");
 
+    EXPECT_EQ(path, expectedPath);
+
+    // check both the clients get created
     auto &clients = getSNMPClients();
     EXPECT_EQ(2, clients.size());
-    EXPECT_EQ(true, clients.find("192.168.1.1") != clients.end());
-    EXPECT_EQ(true, clients.find("192.168.1.2") != clients.end());
+
+    EXPECT_EQ(true, isClientExist("192.168.1.1"));
+    EXPECT_EQ(true, isClientExist("192.168.1.2"));
 }
 
 // Delete SNMP client
 TEST_F(TestSNMPConfManager, DeleteSNMPClient)
 {
-    using namespace sdbusplus::xyz::openbmc_project::Common::Error;
-
     createSNMPClient("192.168.1.1", 24);
     createSNMPClient("192.168.1.2", 24);
 
     auto &clients = getSNMPClients();
     EXPECT_EQ(2, clients.size());
+
     deleteSNMPClient("192.168.1.1");
-    EXPECT_EQ(1, clients.size());
-    EXPECT_EQ(true, clients.find("192.168.1.2") != clients.end());
+
+    auto path = createSNMPClient("192.168.1.3", 24);
+    std::string expectedPath = managerObjPath;
+    expectedPath += std::string("/3");
+    EXPECT_EQ(path, expectedPath);
+
+    EXPECT_EQ(2, clients.size());
+    EXPECT_EQ(true, isClientExist("192.168.1.2"));
+    EXPECT_EQ(false, isClientExist("192.168.1.1"));
+    EXPECT_EQ(true, isClientExist("192.168.1.3"));
 }
 
 } // namespace snmp
diff --git a/test/test_snmp_serialize.cpp b/test/test_snmp_serialize.cpp
index 60a51aa..df27b5b 100644
--- a/test/test_snmp_serialize.cpp
+++ b/test/test_snmp_serialize.cpp
@@ -39,10 +39,13 @@
 
 TEST_F(TestSerialize, serialize)
 {
-    Client client(bus, clientObjPath, manager, "1.1.1.1", 23);
+    std::string objPath = clientObjPath;
+    objPath += "/" + std::to_string(1);
 
-    auto path = serialize(client, manager.dbusPersistentLocation);
-    Client restoreClient(bus, clientObjPath, manager);
+    Client client(bus, objPath.c_str(), manager, "1.1.1.1", 23);
+
+    auto path = serialize(1, client, manager.dbusPersistentLocation);
+    Client restoreClient(bus, objPath.c_str(), manager);
 
     deserialize(path, restoreClient);
 
@@ -52,9 +55,12 @@
 
 TEST_F(TestSerialize, deserialize_non_existent_file)
 {
-    Client client(bus, clientObjPath, manager);
+    std::string objPath = clientObjPath;
+    objPath += "/" + std::to_string(1);
+
+    Client client(bus, objPath.c_str(), manager);
     fs::path path = manager.dbusPersistentLocation;
-    path /= "snmpTest";
+    path /= "1";
 
     auto ret = deserialize(path, client);
 
@@ -63,12 +69,15 @@
 
 TEST_F(TestSerialize, deserialize_empty_file)
 {
-    Client restoreClient(bus, clientObjPath, manager);
+    std::string objPath = clientObjPath;
+    objPath += "/" + std::to_string(1);
+
+    Client restoreClient(bus, objPath.c_str(), manager);
 
     std::fstream file;
 
     fs::path path = manager.dbusPersistentLocation;
-    path /= "snmpTest";
+    path /= "1";
 
     file.open(path.string(), std::ofstream::out);
     file.close();
