diff --git a/test/watchdog_test.cpp b/test/watchdog_test.cpp
index cb22a83..72347aa 100644
--- a/test/watchdog_test.cpp
+++ b/test/watchdog_test.cpp
@@ -1,7 +1,30 @@
-#include <watchdog_test.hpp>
+#include <chrono>
+
+#include "watchdog_test.hpp"
 
 using namespace phosphor::watchdog;
 
+seconds WdogTest::waitForWatchdog(seconds timeLimit)
+{
+    auto previousTimeRemaining = wdog->timeRemaining();
+    auto ret = 0s;
+    while (ret < timeLimit &&
+           previousTimeRemaining >= wdog->timeRemaining() &&
+           wdog->timerEnabled())
+    {
+        previousTimeRemaining = wdog->timeRemaining();
+
+        // Returns -0- on timeout and positive number on dispatch
+        auto sleepTime = 1s;
+        if(!sd_event_run(eventP.get(), microseconds(sleepTime).count()))
+        {
+            ret += sleepTime;
+        }
+    }
+
+    return ret;
+}
+
 /** @brief Make sure that watchdog is started and not enabled */
 TEST_F(WdogTest, createWdogAndDontEnable)
 {
@@ -91,19 +114,9 @@
     wdog->timeRemaining(newTime.count());
 
     // Waiting for expiration
-    int count = 0;
-    while(count < expireTime.count() && !wdog->timerExpired())
-    {
-        // Returns -0- on timeout and positive number on dispatch
-        auto sleepTime = duration_cast<microseconds>(seconds(1s));
-        if(!sd_event_run(eventP.get(), sleepTime.count()))
-        {
-            count++;
-        }
-    }
+    EXPECT_EQ(expireTime - 1s, waitForWatchdog(expireTime));
     EXPECT_TRUE(wdog->timerExpired());
     EXPECT_FALSE(wdog->timerEnabled());
-    EXPECT_EQ(expireTime.count() - 1, count);
 
     // Make sure secondary callback was not called.
     EXPECT_FALSE(expired);
@@ -132,19 +145,10 @@
                         milliseconds(defaultInterval));
 
     // Waiting default expiration
-    int count = 0;
-    while(count < expireTime.count() && !wdog->timerExpired())
-    {
-        // Returns -0- on timeout and positive number on dispatch
-        auto sleepTime = duration_cast<microseconds>(seconds(1s));
-        if(!sd_event_run(eventP.get(), sleepTime.count()))
-        {
-            count++;
-        }
-    }
+    EXPECT_EQ(expireTime - 1s, waitForWatchdog(expireTime));
+
     EXPECT_TRUE(wdog->enabled());
     EXPECT_EQ(0, wdog->timeRemaining());
     EXPECT_TRUE(wdog->timerExpired());
     EXPECT_FALSE(wdog->timerEnabled());
-    EXPECT_EQ(expireTime.count() - 1, count);
 }
diff --git a/test/watchdog_test.hpp b/test/watchdog_test.hpp
index 5b5348a..87c64e9 100644
--- a/test/watchdog_test.hpp
+++ b/test/watchdog_test.hpp
@@ -45,4 +45,8 @@
         // This is just to satisfy the constructor. Does not have
         // a need to check if the objects paths have been created.
         static constexpr auto TEST_PATH = "/test/path";
+
+        // Returns how long it took for the current watchdog timer to be
+        // disabled or have its timeRemaining reset.
+        seconds waitForWatchdog(seconds timeLimit);
 };
