diff --git a/phosphor-regulators/test/meson.build b/phosphor-regulators/test/meson.build
index 8a1d059..8bf6a5c 100644
--- a/phosphor-regulators/test/meson.build
+++ b/phosphor-regulators/test/meson.build
@@ -56,6 +56,7 @@
                 dependencies: [
                     gmock,
                     gtest,
+                    sdbusplus
                 ],
                 link_args: dynamic_linker,
                 build_rpath: get_option('oe-sdk').enabled() ? rpath : '',
diff --git a/phosphor-regulators/test/mock_services.hpp b/phosphor-regulators/test/mock_services.hpp
new file mode 100644
index 0000000..58c565e
--- /dev/null
+++ b/phosphor-regulators/test/mock_services.hpp
@@ -0,0 +1,104 @@
+/**
+ * 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 "error_logging.hpp"
+#include "journal.hpp"
+#include "mock_error_logging.hpp"
+#include "mock_journal.hpp"
+
+#include <sdbusplus/bus.hpp>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class MockServices
+ *
+ * Implementation of the Services interface using mock system services.
+ */
+class MockServices : public Services
+{
+  public:
+    // Specify which compiler-generated methods we want
+    MockServices() = default;
+    MockServices(const MockServices&) = delete;
+    MockServices(MockServices&&) = delete;
+    MockServices& operator=(const MockServices&) = delete;
+    MockServices& operator=(MockServices&&) = delete;
+    virtual ~MockServices() = default;
+
+    /** @copydoc Services::getBus() */
+    virtual sdbusplus::bus::bus& getBus() override
+    {
+        return bus;
+    }
+
+    /** @copydoc Services::getErrorLogging() */
+    virtual ErrorLogging& getErrorLogging() override
+    {
+        return errorLogging;
+    }
+
+    /** @copydoc Services::getJournal() */
+    virtual Journal& getJournal() override
+    {
+        return journal;
+    }
+
+    /**
+     * Returns the MockErrorLogging object that implements the ErrorLogging
+     * interface.
+     *
+     * This allows test cases to use the object in EXPECT_CALL() statements.
+     *
+     * @return mock error logging object
+     */
+    virtual MockErrorLogging& getMockErrorLogging() override
+    {
+        return errorLogging;
+    }
+
+    /**
+     * Returns the MockJournal object that implements the Journal interface.
+     *
+     * This allows test cases to use the object in EXPECT_CALL() statements.
+     *
+     * @return mock journal object
+     */
+    virtual MockJournal& getMockJournal() override
+    {
+        return journal;
+    }
+
+  private:
+    /**
+     * D-Bus bus object.
+     */
+    sdbusplus::bus::bus bus{sdbusplus::bus::new_default()};
+
+    /**
+     * Mock implementation of the ErrorLogging interface.
+     */
+    MockErrorLogging errorLogging{};
+
+    /**
+     * Mock implementation of the Journal interface.
+     */
+    MockJournal journal{};
+};
+
+} // namespace phosphor::power::regulators
