diff --git a/libs/binder/tests/binderLibTest.cpp b/libs/binder/tests/binderLibTest.cpp
index 12b54c2..c4eacfd 100644
--- a/libs/binder/tests/binderLibTest.cpp
+++ b/libs/binder/tests/binderLibTest.cpp
@@ -29,6 +29,7 @@
 #include <gtest/gtest.h>
 
 #include <android-base/properties.h>
+#include <android-base/result-gmock.h>
 #include <android-base/result.h>
 #include <android-base/unique_fd.h>
 #include <binder/Binder.h>
@@ -52,6 +53,7 @@
 using namespace android;
 using namespace std::string_literals;
 using namespace std::chrono_literals;
+using android::base::testing::HasValue;
 using testing::ExplainMatchResult;
 using testing::Not;
 using testing::WithParamInterface;
@@ -62,15 +64,6 @@
     return expected == arg;
 }
 
-// e.g. Result<int32_t> v = 0; EXPECT_THAT(result, ResultHasValue(0));
-MATCHER_P(ResultHasValue, resultMatcher, "") {
-    if (!arg.ok()) {
-        *result_listener << "contains error " << arg.error();
-        return false;
-    }
-    return ExplainMatchResult(resultMatcher, arg.value(), result_listener);
-}
-
 static ::testing::AssertionResult IsPageAligned(void *buf) {
     if (((unsigned long)buf & ((unsigned long)PAGE_SIZE - 1)) == 0)
         return ::testing::AssertionSuccess();
@@ -522,7 +515,7 @@
 }
 
 TEST_F(BinderLibTest, GetId) {
-    EXPECT_THAT(GetId(m_server), ResultHasValue(0));
+    EXPECT_THAT(GetId(m_server), HasValue(0));
 }
 
 TEST_F(BinderLibTest, PtrSize) {
@@ -1287,7 +1280,7 @@
     sp<IBinder> server = isRemote ? sp<IBinder>(CreateRemoteService(id))
                                   : sp<IBinder>(sp<BinderLibTestService>::make(id, false));
     ASSERT_EQ(isRemote, !!server->remoteBinder());
-    ASSERT_THAT(GetId(server), ResultHasValue(id));
+    ASSERT_THAT(GetId(server), HasValue(id));
 
     unsigned int port = 0;
     // Fake servicedispatcher.
@@ -1317,7 +1310,7 @@
         EXPECT_EQ(OK, rpcServerBinder->pingBinder());
 
         // Check that |rpcServerBinder| and |server| points to the same service.
-        EXPECT_THAT(GetId(rpcServerBinder), ResultHasValue(id));
+        EXPECT_THAT(GetId(rpcServerBinder), HasValue(id));
 
         // Occupy the server thread. The server should still have enough threads to handle
         // other connections.
