diff --git a/test/unittest.cpp b/test/unittest.cpp
index 9a9d2a9..d9b22c7 100644
--- a/test/unittest.cpp
+++ b/test/unittest.cpp
@@ -20,9 +20,7 @@
 
 namespace avb {
 
-void BasicReadTest() {
-    TEST_BEGIN(__func__)
-
+TEST(AvbTest, BasicReadTest) {
     uint32_t slot = 0;
     uint64_t value = 0;
     RollbackIndexRequest request(slot, value);
@@ -31,13 +29,9 @@
     avb_manager.ReadRollbackIndex(request, &response);
     EXPECT_EQ(AvbError::kNone, response.get_error(), "Read failed");
     EXPECT_EQ(1, response.get_value(), "Did not read expected value");
-
-    TEST_END
 }
 
-void ValidWriteTest() {
-    TEST_BEGIN(__func__)
-
+TEST(AvbTest, ValidWriteTest) {
     uint32_t slot = 0;
     uint64_t value = 2;  // Read always returns 1
     RollbackIndexRequest request(slot, value);
@@ -46,13 +40,9 @@
     avb_manager.WriteRollbackIndex(request, &response);
     EXPECT_EQ(AvbError::kNone, response.get_error(), "Write failed");
     EXPECT_EQ(2, response.get_value(), "Did not write expected value");
-
-    TEST_END
 }
 
-void InvalidWriteTest() {
-    TEST_BEGIN(__func__)
-
+TEST(AvbTest, InvalidWriteTest) {
     uint32_t slot = 0;
     uint64_t value = 0;  // Read always returns 1
     RollbackIndexRequest request(slot, value);
@@ -63,13 +53,9 @@
               "Allowed writing index value less than existing value");
     EXPECT_EQ(1, response.get_value(),
               "Did not read expected value after failed write");
-
-    TEST_END
 }
 
-void SlotUpperBitsSetTest() {
-    TEST_BEGIN(__func__)
-
+TEST(AvbTest, SlotUpperBitsSetTest) {
     uint32_t slot = 0x00010000;
     uint64_t value = 0;
     RollbackIndexRequest request(slot, value);
@@ -78,13 +64,9 @@
     avb_manager.ReadRollbackIndex(request, &response);
     EXPECT_EQ(AvbError::kInvalid, response.get_error(),
               "Slot was not rejected");
-
-    TEST_END
 }
 
-void SlotMaxValueTest() {
-    TEST_BEGIN(__func__)
-
+TEST(AvbTest, SlotMaxValueTest) {
     uint32_t slot = kRollbackSlotMax + 1;
     uint64_t value = 0;
     RollbackIndexRequest request(slot, value);
@@ -93,13 +75,9 @@
     avb_manager.ReadRollbackIndex(request, &response);
     EXPECT_EQ(AvbError::kInvalid, response.get_error(),
               "Failed to reject write to slot > max slot");
-
-    TEST_END
 }
 
-void SlotFlagTest() {
-    TEST_BEGIN(__func__)
-
+TEST(AvbTest, SlotFlagTest) {
     uint32_t slot = 0x0000f000;
     uint64_t value = 0;
     RollbackIndexRequest request(slot, value);
@@ -108,21 +86,10 @@
     avb_manager.ReadRollbackIndex(request, &response);
     EXPECT_EQ(AvbError::kNone, response.get_error(),
               "Could not validate 0xf flag");
-
-    TEST_END
 }
 
 }  // namespace avb
 
 int main() {
-    TLOGI("Welcome to AVB service unit test -------------------------\n\n");
-    avb::BasicReadTest();
-    avb::ValidWriteTest();
-    avb::InvalidWriteTest();
-    avb::SlotUpperBitsSetTest();
-    avb::SlotMaxValueTest();
-    avb::SlotFlagTest();
-    TLOGI("AVB service unit tests done ------------------------------\n\n");
-    TLOGI("PASSED: %u, FAILED: %u\n", _tests_total - _tests_failed,
-          _tests_failed);
+    return RUN_ALL_TESTS() ? 0 : 1;
 }
