diff --git a/tests/unit/security/tpm/back-end.t.cpp b/tests/unit/security/tpm/back-end.t.cpp
index d432d73..cb0ec5d 100644
--- a/tests/unit/security/tpm/back-end.t.cpp
+++ b/tests/unit/security/tpm/back-end.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -343,7 +343,8 @@
   for (int i = 0; i < 100; i++) {
     auto key = tpm.createKey(identity, RsaKeyParams());
     Name keyName = key->getKeyName();
-    BOOST_CHECK(keyNames.insert(keyName).second);
+    BOOST_TEST_INFO_SCOPE("KeyName = " << keyName);
+    BOOST_TEST(keyNames.insert(keyName).second);
   }
 }
 
diff --git a/tests/unit/security/validator-config/checker.t.cpp b/tests/unit/security/validator-config/checker.t.cpp
index 523f1a2..e340b26 100644
--- a/tests/unit/security/validator-config/checker.t.cpp
+++ b/tests/unit/security/validator-config/checker.t.cpp
@@ -40,10 +40,10 @@
 public:
   CheckerFixture()
   {
-    names.push_back("/foo/bar");
-    names.push_back("/foo/bar/bar");
-    names.push_back("/foo");
-    names.push_back("/other/prefix");
+    names.emplace_back("/foo/bar");
+    names.emplace_back("/foo/bar/bar");
+    names.emplace_back("/foo");
+    names.emplace_back("/other/prefix");
   }
 
   static Name
@@ -60,22 +60,6 @@
     return Name(name).append(suffix);
   }
 
-  template<typename PktType, typename C>
-  static void
-  testChecker(C& checker, tlv::SignatureTypeValue sigType, const Name& pktName, const Name& klName, bool expectedOutcome)
-  {
-    BOOST_TEST_INFO_SCOPE("Packet = " << pktName);
-    BOOST_TEST_INFO_SCOPE("KeyLocator = " << klName);
-
-    auto state = PktType::makeState();
-    auto result = checker.check(PktType::getType(), sigType, pktName, klName, *state);
-    BOOST_CHECK_EQUAL(bool(result), expectedOutcome);
-    BOOST_CHECK(boost::logic::indeterminate(state->getOutcome()));
-    if (!result) {
-      BOOST_CHECK_NE(result.getErrorMessage(), "");
-    }
-  }
-
 public:
   std::vector<Name> names;
 };
@@ -308,6 +292,23 @@
   CheckerFixtures
 >;
 
+template<typename PktType, typename C>
+static void
+testChecker(C& checker, tlv::SignatureTypeValue sigType, const Name& pktName, const Name& klName, bool expectedOutcome)
+{
+  BOOST_TEST_INFO_SCOPE("Packet = " << pktName);
+  BOOST_TEST_INFO_SCOPE("SignatureType = " << sigType);
+  BOOST_TEST_INFO_SCOPE("KeyLocator = " << klName);
+
+  auto state = PktType::makeState();
+  auto result = checker.check(PktType::getType(), sigType, pktName, klName, *state);
+  BOOST_TEST(bool(result) == expectedOutcome);
+  BOOST_TEST(boost::logic::indeterminate(state->getOutcome()));
+  if (!result) {
+    BOOST_TEST(!result.getErrorMessage().empty());
+  }
+}
+
 BOOST_FIXTURE_TEST_CASE_TEMPLATE(Checks, T, Tests, boost::mp11::mp_second<T>)
 {
   using PktType = boost::mp11::mp_first<T>;
@@ -321,12 +322,12 @@
       bool expectedOutcome = this->outcomes[i][j];
 
       auto klName = this->makeKeyLocatorKeyName(this->names[j]);
-      this->template testChecker<PktType>(this->checker, tlv::SignatureSha256WithRsa, pktName, klName, expectedOutcome);
-      this->template testChecker<PktType>(this->checker, tlv::SignatureSha256WithEcdsa, pktName, klName, false);
+      testChecker<PktType>(this->checker, tlv::SignatureSha256WithRsa, pktName, klName, expectedOutcome);
+      testChecker<PktType>(this->checker, tlv::SignatureSha256WithEcdsa, pktName, klName, false);
 
       klName = this->makeKeyLocatorCertName(this->names[j]);
-      this->template testChecker<PktType>(this->checker, tlv::SignatureSha256WithRsa, pktName, klName, expectedOutcome);
-      this->template testChecker<PktType>(this->checker, tlv::SignatureSha256WithEcdsa, pktName, klName, false);
+      testChecker<PktType>(this->checker, tlv::SignatureSha256WithRsa, pktName, klName, expectedOutcome);
+      testChecker<PktType>(this->checker, tlv::SignatureSha256WithEcdsa, pktName, klName, false);
     }
   }
 }
