diff --git a/vndk/tools/header-checker/Android.bp b/vndk/tools/header-checker/Android.bp
index 12816bf..fdf9c5a 100644
--- a/vndk/tools/header-checker/Android.bp
+++ b/vndk/tools/header-checker/Android.bp
@@ -199,6 +199,7 @@
 
     static_libs: [
         "libbase",
+        "libgmock",
         "libgtest",
         "libgtest_main",
         "libheader-checker",
diff --git a/vndk/tools/header-checker/src/repr/symbol/version_script_parser_test.cpp b/vndk/tools/header-checker/src/repr/symbol/version_script_parser_test.cpp
index 465119a..15e1351 100644
--- a/vndk/tools/header-checker/src/repr/symbol/version_script_parser_test.cpp
+++ b/vndk/tools/header-checker/src/repr/symbol/version_script_parser_test.cpp
@@ -14,6 +14,7 @@
 
 #include "repr/symbol/version_script_parser.h"
 
+#include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
 #include <map>
@@ -25,6 +26,10 @@
 namespace repr {
 
 
+using testing::ElementsAre;
+using testing::Key;
+
+
 TEST(VersionScriptParserTest, SmokeTest) {
   static const char testdata[] = R"TESTDATA(
     LIBEX_1.0 {
@@ -49,16 +54,10 @@
   ASSERT_TRUE(result);
 
   const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
-  EXPECT_NE(funcs.end(), funcs.find("foo1"));
-  EXPECT_NE(funcs.end(), funcs.find("foo2"));
-  EXPECT_EQ(funcs.end(), funcs.find("bar1"));
-  EXPECT_EQ(funcs.end(), funcs.find("bar2"));
+  EXPECT_THAT(funcs, ElementsAre(Key("foo1"), Key("foo2")));
 
   const ExportedSymbolSet::VarMap &vars = result->GetVars();
-  EXPECT_NE(vars.end(), vars.find("bar1"));
-  EXPECT_NE(vars.end(), vars.find("bar2"));
-  EXPECT_EQ(vars.end(), vars.find("foo1"));
-  EXPECT_EQ(vars.end(), vars.find("foo2"));
+  EXPECT_THAT(vars, ElementsAre(Key("bar1"), Key("bar2")));
 }
 
 
@@ -88,10 +87,10 @@
     ASSERT_TRUE(result);
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
-    EXPECT_NE(funcs.end(), funcs.find("foo2"));
+    EXPECT_THAT(funcs, ElementsAre(Key("foo1"), Key("foo2")));
 
     const ExportedSymbolSet::VarMap &vars = result->GetVars();
-    EXPECT_NE(vars.end(), vars.find("bar2"));
+    EXPECT_THAT(vars, ElementsAre(Key("bar1"), Key("bar2")));
   }
 
   {
@@ -103,10 +102,10 @@
     ASSERT_TRUE(result);
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
-    EXPECT_EQ(funcs.end(), funcs.find("foo2"));
+    EXPECT_THAT(funcs, ElementsAre(Key("foo1")));
 
     const ExportedSymbolSet::VarMap &vars = result->GetVars();
-    EXPECT_EQ(vars.end(), vars.find("bar2"));
+    EXPECT_THAT(vars, ElementsAre(Key("bar1")));
   }
 }
 
@@ -143,23 +142,13 @@
 
   const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-  EXPECT_NE(funcs.end(), funcs.find("global_f1"));
-  EXPECT_NE(funcs.end(), funcs.find("global_f3"));
-  EXPECT_NE(funcs.end(), funcs.find("global_f4"));
-
-  EXPECT_EQ(funcs.end(), funcs.find("local_f2"));
-  EXPECT_EQ(funcs.end(), funcs.find("local_f5"));
-  EXPECT_EQ(funcs.end(), funcs.find("local_f6"));
+  EXPECT_THAT(
+      funcs, ElementsAre(Key("global_f1"), Key("global_f3"), Key("global_f4")));
 
   const ExportedSymbolSet::VarMap &vars = result->GetVars();
 
-  EXPECT_NE(vars.end(), vars.find("global_v1"));
-  EXPECT_NE(vars.end(), vars.find("global_v3"));
-  EXPECT_NE(vars.end(), vars.find("global_v4"));
-
-  EXPECT_EQ(vars.end(), vars.find("local_v2"));
-  EXPECT_EQ(vars.end(), vars.find("local_v5"));
-  EXPECT_EQ(vars.end(), vars.find("local_v6"));
+  EXPECT_THAT(
+      vars, ElementsAre(Key("global_v1"), Key("global_v3"), Key("global_v4")));
 }
 
 
@@ -186,11 +175,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_EQ(funcs.end(), funcs.find("test1"));
-    EXPECT_EQ(funcs.end(), funcs.find("test2"));
-    EXPECT_EQ(funcs.end(), funcs.find("test3"));
-    EXPECT_EQ(funcs.end(), funcs.find("test4"));
-    EXPECT_EQ(funcs.end(), funcs.find("test5"));
+    EXPECT_TRUE(funcs.empty());
   }
 
   {
@@ -204,11 +189,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_EQ(funcs.end(), funcs.find("test1"));
-    EXPECT_EQ(funcs.end(), funcs.find("test2"));
-    EXPECT_EQ(funcs.end(), funcs.find("test3"));
-    EXPECT_EQ(funcs.end(), funcs.find("test4"));
-    EXPECT_NE(funcs.end(), funcs.find("test5"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test5")));
   }
 
   {
@@ -222,11 +203,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_EQ(funcs.end(), funcs.find("test2"));
-    EXPECT_EQ(funcs.end(), funcs.find("test3"));
-    EXPECT_EQ(funcs.end(), funcs.find("test4"));
-    EXPECT_NE(funcs.end(), funcs.find("test5"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1"), Key("test5")));
   }
 
   {
@@ -240,11 +217,8 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_NE(funcs.end(), funcs.find("test2"));
-    EXPECT_NE(funcs.end(), funcs.find("test3"));
-    EXPECT_EQ(funcs.end(), funcs.find("test4"));
-    EXPECT_NE(funcs.end(), funcs.find("test5"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1"), Key("test2"), Key("test3"),
+                                   Key("test5")));
   }
 
   {
@@ -258,11 +232,8 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_NE(funcs.end(), funcs.find("test2"));
-    EXPECT_NE(funcs.end(), funcs.find("test3"));
-    EXPECT_EQ(funcs.end(), funcs.find("test4"));
-    EXPECT_NE(funcs.end(), funcs.find("test5"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1"), Key("test2"), Key("test3"),
+                                   Key("test5")));
   }
 
   {
@@ -276,11 +247,8 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_NE(funcs.end(), funcs.find("test2"));
-    EXPECT_NE(funcs.end(), funcs.find("test3"));
-    EXPECT_NE(funcs.end(), funcs.find("test4"));
-    EXPECT_NE(funcs.end(), funcs.find("test5"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1"), Key("test2"), Key("test3"),
+                                   Key("test4"), Key("test5")));
   }
 }
 
@@ -306,10 +274,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_NE(funcs.end(), funcs.find("test2"));
-    EXPECT_EQ(funcs.end(), funcs.find("test3"));
-    EXPECT_EQ(funcs.end(), funcs.find("test4"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1"), Key("test2")));
   }
 
   {
@@ -322,10 +287,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_NE(funcs.end(), funcs.find("test2"));
-    EXPECT_NE(funcs.end(), funcs.find("test3"));
-    EXPECT_EQ(funcs.end(), funcs.find("test4"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1"), Key("test2"), Key("test3")));
   }
 
   {
@@ -338,10 +300,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_EQ(funcs.end(), funcs.find("test2"));
-    EXPECT_EQ(funcs.end(), funcs.find("test3"));
-    EXPECT_NE(funcs.end(), funcs.find("test4"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1"), Key("test4")));
   }
 }
 
@@ -365,8 +324,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_NE(funcs.end(), funcs.find("test2"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1"), Key("test2")));
   }
 
   {
@@ -379,8 +337,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_EQ(funcs.end(), funcs.find("test1"));
-    EXPECT_EQ(funcs.end(), funcs.find("test2"));
+    EXPECT_TRUE(funcs.empty());
   }
 
   {
@@ -393,8 +350,7 @@
 
     const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
 
-    EXPECT_NE(funcs.end(), funcs.find("test1"));
-    EXPECT_EQ(funcs.end(), funcs.find("test2"));
+    EXPECT_THAT(funcs, ElementsAre(Key("test1")));
   }
 }
 
@@ -422,16 +378,12 @@
   const ExportedSymbolSet::NameSet &cpp_symbols =
       result->GetDemangledCppSymbols();
 
-  EXPECT_NE(cpp_symbols.end(), cpp_symbols.find("Test2::test()"));
-  EXPECT_NE(cpp_symbols.end(), cpp_symbols.find("Test3::test()"));
-
-  EXPECT_EQ(cpp_symbols.end(), cpp_symbols.find("test1"));
-  EXPECT_EQ(cpp_symbols.end(), cpp_symbols.find("test4"));
+  EXPECT_THAT(cpp_symbols, ElementsAre("Test2::test()", "Test3::test()"));
 
   const ExportedSymbolSet::GlobPatternSet &cpp_glob_patterns =
       result->GetDemangledCppGlobPatterns();
 
-  EXPECT_NE(cpp_glob_patterns.end(), cpp_glob_patterns.find("Test4::*"));
+  EXPECT_THAT(cpp_glob_patterns, ElementsAre("Test4::*"));
 }
 
 
@@ -456,11 +408,7 @@
   const ExportedSymbolSet::GlobPatternSet &glob_patterns =
       result->GetGlobPatterns();
 
-  EXPECT_NE(glob_patterns.end(), glob_patterns.find("test1*"));
-  EXPECT_NE(glob_patterns.end(), glob_patterns.find("test2[Aa]"));
-  EXPECT_NE(glob_patterns.end(), glob_patterns.find("test3?"));
-
-  EXPECT_EQ(glob_patterns.end(), glob_patterns.find("test4"));
+  EXPECT_THAT(glob_patterns, ElementsAre("test1*", "test2[Aa]", "test3?"));
 }
 
 
