diff --git a/phosphor-regulators/test/mock_presence_service.hpp b/phosphor-regulators/test/mock_presence_service.hpp
new file mode 100644
index 0000000..7d2881d
--- /dev/null
+++ b/phosphor-regulators/test/mock_presence_service.hpp
@@ -0,0 +1,47 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "presence_service.hpp"
+
+#include <gmock/gmock.h>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class MockPresenceService
+ *
+ * Mock implementation of the PresenceService interface.
+ */
+class MockPresenceService : public PresenceService
+{
+  public:
+    // Specify which compiler-generated methods we want
+    MockPresenceService() = default;
+    MockPresenceService(const MockPresenceService&) = delete;
+    MockPresenceService(MockPresenceService&&) = delete;
+    MockPresenceService& operator=(const MockPresenceService&) = delete;
+    MockPresenceService& operator=(MockPresenceService&&) = delete;
+    virtual ~MockPresenceService() = default;
+
+    MOCK_METHOD(void, clearCache, (), (override));
+
+    MOCK_METHOD(bool, isPresent, (const std::string& inventoryPath),
+                (override));
+};
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/test/mock_services.hpp b/phosphor-regulators/test/mock_services.hpp
index 075768c..1ef7192 100644
--- a/phosphor-regulators/test/mock_services.hpp
+++ b/phosphor-regulators/test/mock_services.hpp
@@ -19,6 +19,8 @@
 #include "journal.hpp"
 #include "mock_error_logging.hpp"
 #include "mock_journal.hpp"
+#include "mock_presence_service.hpp"
+#include "presence_service.hpp"
 #include "services.hpp"
 
 #include <sdbusplus/bus.hpp>
@@ -60,6 +62,12 @@
         return journal;
     }
 
+    /** @copydoc Services::getPresenceService() */
+    virtual PresenceService& getPresenceService() override
+    {
+        return presenceService;
+    }
+
     /**
      * Returns the MockErrorLogging object that implements the ErrorLogging
      * interface.
@@ -85,6 +93,19 @@
         return journal;
     }
 
+    /**
+     * Returns the MockPresenceService object that implements the
+     * PresenceService interface.
+     *
+     * This allows test cases to use the object in EXPECT_CALL() statements.
+     *
+     * @return mock presence service object
+     */
+    virtual MockPresenceService& getMockPresenceService()
+    {
+        return presenceService;
+    }
+
   private:
     /**
      * D-Bus bus object.
@@ -100,6 +121,11 @@
      * Mock implementation of the Journal interface.
      */
     MockJournal journal{};
+
+    /**
+     * Mock implementation of the PresenceService interface.
+     */
+    MockPresenceService presenceService{};
 };
 
 } // namespace phosphor::power::regulators
