diff --git a/tests/daemon/mgmt/manager-base.t.cpp b/tests/daemon/mgmt/manager-base.t.cpp
index cf24989..2fcdd62 100644
--- a/tests/daemon/mgmt/manager-base.t.cpp
+++ b/tests/daemon/mgmt/manager-base.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -29,25 +29,22 @@
 
 namespace nfd::tests {
 
-class TestCommandVoidParameters : public ControlCommand
+class TestCommandVoidParameters : public ndn::nfd::ControlCommand<TestCommandVoidParameters>
 {
-public:
-  TestCommandVoidParameters()
-    : ControlCommand("test-module", "test-void-parameters")
-  {
-  }
+  NDN_CXX_CONTROL_COMMAND(TestCommandVoidParameters, "test-module", "test-void-parameters");
 };
 
-class TestCommandRequireName : public ControlCommand
+const TestCommandVoidParameters::RequestFormat TestCommandVoidParameters::s_requestFormat;
+
+class TestCommandRequireName : public ndn::nfd::ControlCommand<TestCommandRequireName>
 {
-public:
-  TestCommandRequireName()
-    : ControlCommand("test-module", "test-require-name")
-  {
-    m_requestValidator.required(ndn::nfd::CONTROL_PARAMETER_NAME);
-  }
+  NDN_CXX_CONTROL_COMMAND(TestCommandRequireName, "test-module", "test-require-name");
 };
 
+const TestCommandRequireName::RequestFormat TestCommandRequireName::s_requestFormat =
+    RequestFormat()
+    .required(ndn::nfd::CONTROL_PARAMETER_NAME);
+
 class DummyManager final : public ManagerBase
 {
 public:
@@ -59,12 +56,12 @@
 
 private:
   ndn::mgmt::Authorization
-  makeAuthorization(const std::string& verb) final
+  makeAuthorization(const std::string&) final
   {
     return [] (const Name& prefix, const Interest& interest,
-               const ndn::mgmt::ControlParameters* params,
-               ndn::mgmt::AcceptContinuation accept,
-               ndn::mgmt::RejectContinuation reject) {
+               const ndn::mgmt::ControlParametersBase* params,
+               const ndn::mgmt::AcceptContinuation& accept,
+               const ndn::mgmt::RejectContinuation& reject) {
       accept("requester");
     };
   }
@@ -98,6 +95,10 @@
 
   testRegisterCommandHandler("/localhost/nfd/test-module/test-require-name");
   BOOST_CHECK(!wasHandlerCalled);
+
+  testRegisterCommandHandler(Name("/localhost/nfd/test-module/test-require-name")
+                             .append(ControlParameters().setName("test-name").wireEncode()));
+  BOOST_CHECK(wasHandlerCalled);
 }
 
 BOOST_AUTO_TEST_CASE(RegisterStatusDataset)
@@ -149,19 +150,6 @@
                     .getDefaultKey().getDefaultCertificate().getName().toUri());
 }
 
-BOOST_AUTO_TEST_CASE(ValidateParameters)
-{
-  ControlParameters params;
-  TestCommandVoidParameters commandVoidParams;
-  TestCommandRequireName commandRequireName;
-
-  BOOST_CHECK_EQUAL(ManagerBase::validateParameters(commandVoidParams, params), true); // succeeds
-  BOOST_CHECK_EQUAL(ManagerBase::validateParameters(commandRequireName, params), false); // fails
-
-  params.setName("test-name");
-  BOOST_CHECK_EQUAL(ManagerBase::validateParameters(commandRequireName, params), true); // succeeds
-}
-
 BOOST_AUTO_TEST_CASE(MakeRelPrefix)
 {
   auto generatedRelPrefix = m_manager.makeRelPrefix("test-verb");
diff --git a/tests/daemon/mgmt/manager-common-fixture.hpp b/tests/daemon/mgmt/manager-common-fixture.hpp
index 954cef2..c8f5498 100644
--- a/tests/daemon/mgmt/manager-common-fixture.hpp
+++ b/tests/daemon/mgmt/manager-common-fixture.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -112,7 +112,7 @@
    * @brief Check a specified response data with the expected ControlResponse.
    *
    * @param idx the index of the specified Data in m_responses
-   * @param expectedDataName the expected name of this Data
+   * @param expectedName the expected name of this Data
    * @param expectedResponse the expected ControlResponse
    * @param expectedContentType the expected content type of this Data, use -1 to skip this check
    *
@@ -157,7 +157,8 @@
 class ManagerFixtureWithAuthenticator : public ManagerCommonFixture
 {
 public:
-  /** \brief Grant m_identityName privilege to sign commands for the management module.
+  /**
+   * \brief Grant m_identityName privilege to sign commands for the management module.
    */
   void
   setPrivilege(const std::string& privilege);
diff --git a/tests/tools/nfdc/rib-module.t.cpp b/tests/tools/nfdc/rib-module.t.cpp
index f349dfd..cc01018 100644
--- a/tests/tools/nfdc/rib-module.t.cpp
+++ b/tests/tools/nfdc/rib-module.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -207,9 +207,8 @@
     }
 
     ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/rib/register");
-    ndn::nfd::RibRegisterCommand cmd;
-    cmd.validateRequest(req);
-    cmd.applyDefaultsToRequest(req);
+    ndn::nfd::RibRegisterCommand::validateRequest(req);
+    ndn::nfd::RibRegisterCommand::applyDefaultsToRequest(req);
     BOOST_CHECK_EQUAL(req.getName(), "/vxXoEaWeDB");
     BOOST_CHECK_EQUAL(req.getFaceId(), 10156);
     BOOST_CHECK_EQUAL(req.getOrigin(), ndn::nfd::ROUTE_ORIGIN_STATIC);
@@ -235,9 +234,8 @@
     }
 
     ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/rib/register");
-    ndn::nfd::RibRegisterCommand cmd;
-    cmd.validateRequest(req);
-    cmd.applyDefaultsToRequest(req);
+    ndn::nfd::RibRegisterCommand::validateRequest(req);
+    ndn::nfd::RibRegisterCommand::applyDefaultsToRequest(req);
     BOOST_CHECK_EQUAL(req.getName(), "/FLQAsaYnYf");
     BOOST_CHECK_EQUAL(req.getFaceId(), 2249);
     BOOST_CHECK_EQUAL(req.getOrigin(), 17591);
@@ -280,9 +278,8 @@
     }
     else if (Name("/localhost/nfd/faces/create").isPrefixOf(interest.getName())) {
       ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/faces/create");
-      ndn::nfd::FaceCreateCommand cmd;
-      cmd.validateRequest(req);
-      cmd.applyDefaultsToRequest(req);
+      ndn::nfd::FaceCreateCommand::validateRequest(req);
+      ndn::nfd::FaceCreateCommand::applyDefaultsToRequest(req);
       BOOST_CHECK_EQUAL(req.getUri(), "udp4://202.83.168.28:6363");
 
       ControlParameters resp = req;
@@ -297,15 +294,13 @@
     }
     else if (Name("/localhost/nfd/rib/register").isPrefixOf(interest.getName())) {
       ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/rib/register");
-      ndn::nfd::RibRegisterCommand cmd;
-      cmd.validateRequest(req);
-      cmd.applyDefaultsToRequest(req);
+      ndn::nfd::RibRegisterCommand::validateRequest(req);
+      ndn::nfd::RibRegisterCommand::applyDefaultsToRequest(req);
       BOOST_CHECK_EQUAL(req.getName(), "/634jfAfdf");
       BOOST_CHECK_EQUAL(req.getFaceId(), 255);
       BOOST_CHECK_EQUAL(req.getOrigin(), 17591);
       BOOST_CHECK_EQUAL(req.getCost(), 702);
-      BOOST_CHECK_EQUAL(req.getFlags(), ndn::nfd::ROUTE_FLAG_CHILD_INHERIT |
-                                        ndn::nfd::ROUTE_FLAG_CAPTURE);
+      BOOST_CHECK_EQUAL(req.getFlags(), ndn::nfd::ROUTE_FLAG_CHILD_INHERIT | ndn::nfd::ROUTE_FLAG_CAPTURE);
       BOOST_REQUIRE_EQUAL(req.hasExpirationPeriod(), true);
       BOOST_REQUIRE_EQUAL(req.getExpirationPeriod(), 727411987_ms);
 
@@ -405,9 +400,8 @@
     }
 
     ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/rib/unregister");
-    ndn::nfd::RibUnregisterCommand cmd;
-    cmd.validateRequest(req);
-    cmd.applyDefaultsToRequest(req);
+    ndn::nfd::RibUnregisterCommand::validateRequest(req);
+    ndn::nfd::RibUnregisterCommand::applyDefaultsToRequest(req);
     BOOST_CHECK_EQUAL(req.getName(), "/2B5NUGjpt");
     BOOST_CHECK_EQUAL(req.getFaceId(), 10156);
     BOOST_CHECK_EQUAL(req.getOrigin(), ndn::nfd::ROUTE_ORIGIN_STATIC);
@@ -429,9 +423,8 @@
     }
 
     ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/rib/unregister");
-    ndn::nfd::RibUnregisterCommand cmd;
-    cmd.validateRequest(req);
-    cmd.applyDefaultsToRequest(req);
+    ndn::nfd::RibUnregisterCommand::validateRequest(req);
+    ndn::nfd::RibUnregisterCommand::applyDefaultsToRequest(req);
     BOOST_CHECK_EQUAL(req.getName(), "/wHdNn0BtUF");
     BOOST_CHECK_EQUAL(req.getFaceId(), 2249);
     BOOST_CHECK_EQUAL(req.getOrigin(), 15246);
@@ -454,9 +447,8 @@
     }
 
     ControlParameters req = MOCK_NFD_MGMT_REQUIRE_COMMAND_IS("/localhost/nfd/rib/unregister");
-    ndn::nfd::RibUnregisterCommand cmd;
-    cmd.validateRequest(req);
-    cmd.applyDefaultsToRequest(req);
+    ndn::nfd::RibUnregisterCommand::validateRequest(req);
+    ndn::nfd::RibUnregisterCommand::applyDefaultsToRequest(req);
     BOOST_TEST_INFO_SCOPE("FaceId=" << req.getFaceId());
     BOOST_CHECK_EQUAL(req.getName(), "/nm5y8X8b2");
     BOOST_CHECK(faceIds.erase(req.getFaceId()));
