diff --git a/phosphor-regulators/test/actions/action_environment_tests.cpp b/phosphor-regulators/test/actions/action_environment_tests.cpp
index ffb75e9..de52845 100644
--- a/phosphor-regulators/test/actions/action_environment_tests.cpp
+++ b/phosphor-regulators/test/actions/action_environment_tests.cpp
@@ -19,7 +19,6 @@
 #include "id_map.hpp"
 #include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
-#include "pmbus_utils.hpp"
 #include "rule.hpp"
 
 #include <cstddef> // for size_t
@@ -65,29 +64,6 @@
     }
 }
 
-TEST(ActionEnvironmentTests, AddSensorReading)
-{
-    IDMap idMap{};
-    MockServices services{};
-    ActionEnvironment env{idMap, "", services};
-    pmbus_utils::SensorReading reading;
-    reading.type = pmbus_utils::SensorValueType::iout;
-    reading.value = 1;
-    EXPECT_EQ(env.getSensorReadings().size(), 0);
-    env.addSensorReading(reading);
-    EXPECT_EQ(env.getSensorReadings().size(), 1);
-    EXPECT_EQ(env.getSensorReadings()[0].type,
-              pmbus_utils::SensorValueType::iout);
-    EXPECT_EQ(env.getSensorReadings()[0].value, 1);
-    reading.type = pmbus_utils::SensorValueType::vout;
-    reading.value = 2;
-    env.addSensorReading(reading);
-    EXPECT_EQ(env.getSensorReadings().size(), 2);
-    EXPECT_EQ(env.getSensorReadings()[1].type,
-              pmbus_utils::SensorValueType::vout);
-    EXPECT_EQ(env.getSensorReadings()[1].value, 2);
-}
-
 TEST(ActionEnvironmentTests, DecrementRuleDepth)
 {
     IDMap idMap{};
@@ -223,29 +199,6 @@
     EXPECT_EQ(env.getRuleDepth(), 0);
 }
 
-TEST(ActionEnvironmentTests, GetSensorReadings)
-{
-    IDMap idMap{};
-    MockServices services{};
-    ActionEnvironment env{idMap, "", services};
-    pmbus_utils::SensorReading reading;
-    reading.type = pmbus_utils::SensorValueType::pout;
-    reading.value = 1.3;
-    EXPECT_EQ(env.getSensorReadings().size(), 0);
-    env.addSensorReading(reading);
-    EXPECT_EQ(env.getSensorReadings().size(), 1);
-    EXPECT_EQ(env.getSensorReadings()[0].type,
-              pmbus_utils::SensorValueType::pout);
-    EXPECT_EQ(env.getSensorReadings()[0].value, 1.3);
-    reading.type = pmbus_utils::SensorValueType::temperature;
-    reading.value = -1;
-    env.addSensorReading(reading);
-    EXPECT_EQ(env.getSensorReadings().size(), 2);
-    EXPECT_EQ(env.getSensorReadings()[1].type,
-              pmbus_utils::SensorValueType::temperature);
-    EXPECT_EQ(env.getSensorReadings()[1].value, -1);
-}
-
 TEST(ActionEnvironmentTests, GetServices)
 {
     IDMap idMap{};
diff --git a/phosphor-regulators/test/actions/pmbus_read_sensor_action_tests.cpp b/phosphor-regulators/test/actions/pmbus_read_sensor_action_tests.cpp
index d0f1398..09edfe7 100644
--- a/phosphor-regulators/test/actions/pmbus_read_sensor_action_tests.cpp
+++ b/phosphor-regulators/test/actions/pmbus_read_sensor_action_tests.cpp
@@ -122,10 +122,14 @@
         std::optional<int8_t> exponent{};
         PMBusReadSensorAction action{type, command, format, exponent};
         EXPECT_EQ(action.execute(env), true);
-        EXPECT_EQ(env.getSensorReadings().size(), 1);
-        EXPECT_EQ(env.getSensorReadings()[0].type,
-                  pmbus_utils::SensorValueType::iout);
-        EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 11.5);
+        /**
+         * TODO: Replace with EXPECT calls using MockSensors
+         *
+         *  EXPECT_EQ(env.getSensorReadings().size(), 1);
+         *  EXPECT_EQ(env.getSensorReadings()[0].type,
+         *            pmbus_utils::SensorValueType::iout);
+         *  EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 11.5);
+         */
     }
     catch (...)
     {
@@ -167,10 +171,14 @@
         std::optional<int8_t> exponent{3};
         PMBusReadSensorAction action{type, command, format, exponent};
         EXPECT_EQ(action.execute(env), true);
-        EXPECT_EQ(env.getSensorReadings().size(), 1);
-        EXPECT_EQ(env.getSensorReadings()[0].type,
-                  pmbus_utils::SensorValueType::vout);
-        EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 16);
+        /**
+         * TODO: Replace with EXPECT calls using MockSensors
+         *
+         * EXPECT_EQ(env.getSensorReadings().size(), 1);
+         * EXPECT_EQ(env.getSensorReadings()[0].type,
+         *           pmbus_utils::SensorValueType::vout);
+         * EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 16);
+         */
     }
     catch (...)
     {
@@ -213,10 +221,14 @@
         std::optional<int8_t> exponent{};
         PMBusReadSensorAction action{type, command, format, exponent};
         EXPECT_EQ(action.execute(env), true);
-        EXPECT_EQ(env.getSensorReadings().size(), 1);
-        EXPECT_EQ(env.getSensorReadings()[0].type,
-                  pmbus_utils::SensorValueType::vout_peak);
-        EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 0.232421875);
+        /**
+         * TODO: Replace with EXPECT calls using MockSensors
+         *
+         * EXPECT_EQ(env.getSensorReadings().size(), 1);
+         * EXPECT_EQ(env.getSensorReadings()[0].type,
+         *           pmbus_utils::SensorValueType::vout_peak);
+         * EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 0.232421875);
+         */
     }
     catch (...)
     {
