diff --git a/perfprofd/tests/perfprofd_test.cc b/perfprofd/tests/perfprofd_test.cc
index 8712f0c..8314880 100644
--- a/perfprofd/tests/perfprofd_test.cc
+++ b/perfprofd/tests/perfprofd_test.cc
@@ -202,9 +202,8 @@
   // match, e.g. if we see the expected excerpt anywhere in the
   // result, it's a match (for exact match, set exact to true)
   //
-  void CompareLogMessages(const std::string& expected,
-                          const char* testpoint,
-                          bool exactMatch = false) {
+  ::testing::AssertionResult CompareLogMessages(const std::string& expected,
+                                                bool exactMatch = false) {
      std::string sqexp = squeezeWhite(expected, "expected");
 
      // Strip out JIT errors.
@@ -216,17 +215,18 @@
      std::string sqact = squeezeWhite(test_logger.JoinTestLog(" ", strip_jit), "actual");
 
      if (exactMatch) {
-       EXPECT_STREQ(sqexp.c_str(), sqact.c_str());
-     } else {
-       std::size_t foundpos = sqact.find(sqexp);
-       bool wasFound = true;
-       if (foundpos == std::string::npos) {
-         std::cerr << testpoint << ": expected result not found\n";
-         std::cerr << " Actual: \"" << sqact << "\"\n";
-         std::cerr << " Expected: \"" << sqexp << "\"\n";
-         wasFound = false;
+       if (sqexp == sqact) {
+         return ::testing::AssertionSuccess() << sqexp << " is equal to " << sqact;
        }
-       EXPECT_TRUE(wasFound);
+       return ::testing::AssertionFailure() << "Expected:" << std::endl << sqexp << std::endl
+                                            << "Received:" << std::endl << sqact;
+     } else {
+       if (sqact.find(sqexp) == std::string::npos) {
+         return ::testing::AssertionFailure()
+             << "Expected to find:" << std::endl << sqexp << std::endl
+             << "in:" << std::endl << sqact;
+       }
+       return ::testing::AssertionSuccess() << sqexp << " was found in " << sqact;
      }
   }
 
@@ -482,7 +482,7 @@
                                           );
 
   // check to make sure entire log matches
-  CompareLogMessages(expected, "MissingGMS");
+  EXPECT_TRUE(CompareLogMessages(expected));
 }
 
 
@@ -518,7 +518,7 @@
       I: profile collection skipped (missing config directory)
                                           );
   // check to make sure log excerpt matches
-  CompareLogMessages(expected, "MissingOptInSemaphoreFile");
+  EXPECT_TRUE(CompareLogMessages(expected));
 }
 
 TEST_F(PerfProfdTest, MissingPerfExecutable)
@@ -555,7 +555,7 @@
       I: profile collection skipped (missing 'perf' executable)
                                           );
   // check to make sure log excerpt matches
-  CompareLogMessages(expected, "MissingPerfExecutable");
+  EXPECT_TRUE(CompareLogMessages(expected));
 }
 
 TEST_F(PerfProfdTest, BadPerfRun)
@@ -597,7 +597,7 @@
                                           );
 
   // check to make sure log excerpt matches
-  CompareLogMessages(expected, "BadPerfRun");
+  EXPECT_TRUE(CompareLogMessages(expected));
 }
 
 TEST_F(PerfProfdTest, ConfigFileParsing)
@@ -631,7 +631,7 @@
                                           );
 
   // check to make sure log excerpt matches
-  CompareLogMessages(expected, "ConfigFileParsing");
+  EXPECT_TRUE(CompareLogMessages(expected));
 }
 
 TEST_F(PerfProfdTest, ProfileCollectionAnnotations)
@@ -1110,7 +1110,7 @@
       I: finishing Android Wide Profiling daemon
                                           );
   // check to make sure log excerpt matches
-  CompareLogMessages(expandVars(expected), "BasicRunWithLivePerf", true);
+  EXPECT_TRUE(CompareLogMessages(expandVars(expected), true));
 }
 
 TEST_F(PerfProfdTest, MultipleRunWithLivePerf)
@@ -1183,7 +1183,7 @@
       I: finishing Android Wide Profiling daemon
                                           );
   // check to make sure log excerpt matches
-  CompareLogMessages(expandVars(expected), "BasicRunWithLivePerf", true);
+  EXPECT_TRUE(CompareLogMessages(expandVars(expected), true));
 }
 
 TEST_F(PerfProfdTest, CallChainRunWithLivePerf)
@@ -1240,7 +1240,7 @@
       I: finishing Android Wide Profiling daemon
                                           );
   // check to make sure log excerpt matches
-  CompareLogMessages(expandVars(expected), "CallChainRunWithLivePerf", true);
+  EXPECT_TRUE(CompareLogMessages(expandVars(expected), true));
 
   // Check that we have at least one SampleEvent with a callchain.
   SampleEventIterator samples(encodedProfile);
