diff --git a/test/event.cpp b/test/event.cpp
index da935cf..1c30d20 100644
--- a/test/event.cpp
+++ b/test/event.cpp
@@ -1,5 +1,6 @@
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
+#include <memory>
 #include <sdeventplus/event.hpp>
 #include <sdeventplus/exception.hpp>
 #include <sdeventplus/test/sdevent.hpp>
@@ -67,14 +68,31 @@
     EXPECT_THROW(Event::get_default(&mock), SdEventError);
 }
 
-TEST_F(EventTest, LoopSuccess)
+class EventMethodTest : public EventTest
+{
+  protected:
+    std::unique_ptr<Event> event;
+
+    void SetUp()
+    {
+        event =
+            std::make_unique<Event>(expected_event, std::false_type(), &mock);
+    }
+
+    void TearDown()
+    {
+        EXPECT_CALL(mock, sd_event_unref(expected_event))
+            .WillOnce(Return(nullptr));
+    }
+};
+
+TEST_F(EventMethodTest, LoopSuccess)
 {
     EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(0));
-    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
-    EXPECT_EQ(0, Event(expected_event, std::false_type(), &mock).loop());
+    EXPECT_EQ(0, event->loop());
 }
 
-TEST_F(EventTest, LoopUserError)
+TEST_F(EventMethodTest, LoopUserError)
 {
     const int user_error = 10;
     EXPECT_CALL(mock, sd_event_loop(expected_event))
@@ -84,12 +102,46 @@
               Event(expected_event, std::false_type(), &mock).loop());
 }
 
-TEST_F(EventTest, LoopInternalError)
+TEST_F(EventMethodTest, LoopInternalError)
 {
     EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(-EINVAL));
-    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
-    EXPECT_THROW(Event(expected_event, std::false_type(), &mock).loop(),
-                 SdEventError);
+    EXPECT_THROW(event->loop(), SdEventError);
+}
+
+TEST_F(EventMethodTest, GetWatchdogSuccess)
+{
+    EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
+        .WillOnce(Return(0));
+    EXPECT_EQ(0, event->get_watchdog());
+
+    EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
+        .WillOnce(Return(2));
+    EXPECT_EQ(2, event->get_watchdog());
+}
+
+TEST_F(EventMethodTest, GetWatchdogError)
+{
+    EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
+        .WillOnce(Return(-EINVAL));
+    EXPECT_THROW(event->get_watchdog(), SdEventError);
+}
+
+TEST_F(EventMethodTest, SetWatchdogSuccess)
+{
+    EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 0))
+        .WillOnce(Return(0));
+    EXPECT_EQ(0, event->set_watchdog(0));
+
+    EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1))
+        .WillOnce(Return(2));
+    EXPECT_EQ(2, event->set_watchdog(1));
+}
+
+TEST_F(EventMethodTest, SetWatchdogError)
+{
+    EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1))
+        .WillOnce(Return(-EINVAL));
+    EXPECT_THROW(event->set_watchdog(1), SdEventError);
 }
 
 } // namespace
