diff --git a/test/event.cpp b/test/event.cpp
new file mode 100644
index 0000000..da935cf
--- /dev/null
+++ b/test/event.cpp
@@ -0,0 +1,96 @@
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <sdeventplus/event.hpp>
+#include <sdeventplus/exception.hpp>
+#include <sdeventplus/test/sdevent.hpp>
+#include <type_traits>
+
+namespace sdeventplus
+{
+namespace
+{
+
+using testing::DoAll;
+using testing::Return;
+using testing::SetArgPointee;
+
+class EventTest : public testing::Test
+{
+  protected:
+    testing::StrictMock<SdEventMock> mock;
+    sd_event *const expected_event = reinterpret_cast<sd_event *>(1234);
+};
+
+TEST_F(EventTest, NewEventRef)
+{
+    EXPECT_CALL(mock, sd_event_ref(expected_event))
+        .WillOnce(Return(expected_event));
+    Event event(expected_event, &mock);
+
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
+}
+
+TEST_F(EventTest, NewEventNoRef)
+{
+    Event event(expected_event, std::false_type(), &mock);
+
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
+}
+
+TEST_F(EventTest, GetNewEvent)
+{
+    EXPECT_CALL(mock, sd_event_new(testing::_))
+        .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
+    Event event = Event::get_new(&mock);
+
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
+}
+
+TEST_F(EventTest, GetNewEventFail)
+{
+    EXPECT_CALL(mock, sd_event_new(testing::_)).WillOnce(Return(-EINVAL));
+    EXPECT_THROW(Event::get_new(&mock), SdEventError);
+}
+
+TEST_F(EventTest, GetDefaultEvent)
+{
+    EXPECT_CALL(mock, sd_event_default(testing::_))
+        .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
+    Event event = Event::get_default(&mock);
+
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
+}
+
+TEST_F(EventTest, GetDefaultEventFail)
+{
+    EXPECT_CALL(mock, sd_event_default(testing::_)).WillOnce(Return(-EINVAL));
+    EXPECT_THROW(Event::get_default(&mock), SdEventError);
+}
+
+TEST_F(EventTest, 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());
+}
+
+TEST_F(EventTest, LoopUserError)
+{
+    const int user_error = 10;
+    EXPECT_CALL(mock, sd_event_loop(expected_event))
+        .WillOnce(Return(user_error));
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
+    EXPECT_EQ(user_error,
+              Event(expected_event, std::false_type(), &mock).loop());
+}
+
+TEST_F(EventTest, 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);
+}
+
+} // namespace
+} // namespace sdeventplus
