diff --git a/test/user_mgr_test.cpp b/test/user_mgr_test.cpp
index bb84e6d..9dd799a 100644
--- a/test/user_mgr_test.cpp
+++ b/test/user_mgr_test.cpp
@@ -55,9 +55,9 @@
                 .WillByDefault(testing::Return(false));
         }
         mockManager.usersList.emplace(
-            userName,
-            std::make_unique<MockUser>(mockManager.bus, userObj.c_str(),
-                                       groupNames, priv, enabled, mockManager));
+            userName, std::make_unique<phosphor::user::Users>(
+                          mockManager.bus, userObj.c_str(), groupNames, priv,
+                          enabled, mockManager));
     }
 
     DbusUserObj createPrivilegeMapperDbusObject(void)
@@ -131,59 +131,6 @@
     EXPECT_EQ(false, std::get<bool>(userInfo["UserPasswordExpired"]));
     EXPECT_EQ(false, std::get<bool>(userInfo["RemoteUser"]));
 }
-TEST_F(TestUserMgr, mfaEnabled)
-{
-    auto ret =
-        mockManager.enabled(MultiFactorAuthType::GoogleAuthenticator, false);
-    EXPECT_EQ(ret, MultiFactorAuthType::GoogleAuthenticator);
-    EXPECT_EQ(ret, mockManager.enabled());
-
-    ret = mockManager.enabled(MultiFactorAuthType::None, false);
-    EXPECT_EQ(ret, MultiFactorAuthType::None);
-    EXPECT_EQ(ret, mockManager.enabled());
-}
-TEST_F(TestUserMgr, mfaDefaultUser)
-{
-    std::string userName = "testUser";
-    std::string privilege = "priv-admin";
-    std::vector<std::string> groups{"testGroup"};
-    // Create local user
-    createLocalUser(userName, groups, privilege, true);
-    auto user = mockManager.getUserObject(userName);
-    EXPECT_EQ(user->secretKeyIsValid(), false);
-}
-TEST_F(TestUserMgr, mfaCreateSecretKeyEnableMFA)
-{
-    std::string userName = "testUser";
-    std::string privilege = "priv-admin";
-    std::vector<std::string> groups{"testGroup"};
-    // Create local user
-    createLocalUser(userName, groups, privilege, true);
-    MockUser* user =
-        static_cast<MockUser*>(mockManager.getUserObject(userName));
-    EXPECT_EQ(user->secretKeyIsValid(), false);
-    auto ret =
-        mockManager.enabled(MultiFactorAuthType::GoogleAuthenticator, true);
-    EXPECT_EQ(ret, MultiFactorAuthType::GoogleAuthenticator);
-    ON_CALL(*user, createSecretKey).WillByDefault(testing::Return("SKJDY&@H"));
-    user->createSecretKey();
-    EXPECT_EQ(user->secretKeyIsValid(), false);
-}
-TEST_F(TestUserMgr, bypassMFA)
-{
-    std::string userName = "testUser";
-    std::string privilege = "priv-admin";
-    std::vector<std::string> groups{"testGroup"};
-    // Create local user
-    createLocalUser(userName, groups, privilege, true);
-    MockUser* user =
-        static_cast<MockUser*>(mockManager.getUserObject(userName));
-    mockManager.enabled(MultiFactorAuthType::GoogleAuthenticator, true);
-    user->bypassedProtocol(MultiFactorAuthType::GoogleAuthenticator, false);
-    EXPECT_EQ(user->secretKeyGenerationRequired(), false);
-    user->bypassedProtocol(MultiFactorAuthType::None, false);
-    EXPECT_EQ(user->secretKeyGenerationRequired(), true);
-}
 
 TEST_F(TestUserMgr, ldapUserWithPrivMapper)
 {
