diff --git a/tests/tools/mock-nfd-mgmt-fixture.hpp b/tests/tools/mock-nfd-mgmt-fixture.hpp
index 0d5f4ba..8f052eb 100644
--- a/tests/tools/mock-nfd-mgmt-fixture.hpp
+++ b/tests/tools/mock-nfd-mgmt-fixture.hpp
@@ -58,7 +58,7 @@
   }
 
 protected: // ControlCommand
-  /** \brief check the Interest is a command with specified prefix
+  /** \brief Check the Interest is a command with specified prefix.
    *  \retval nullopt last Interest is not the expected command
    *  \return command parameters
    */
@@ -71,7 +71,7 @@
     return ControlParameters(interest.getName().at(expectedPrefix.size()).blockFromValue());
   }
 
-  /** \brief send successful response to a command Interest
+  /** \brief Send successful response to a command Interest.
    */
   void
   succeedCommand(const Interest& interest, const ControlParameters& parameters)
@@ -79,7 +79,7 @@
     this->sendCommandReply(interest, 200, "OK", parameters.wireEncode());
   }
 
-  /** \brief send failure response to a command Interest
+  /** \brief Send failure response to a command Interest.
    */
   void
   failCommand(const Interest& interest, uint32_t code, const std::string& text)
@@ -87,7 +87,7 @@
     this->sendCommandReply(interest, {code, text});
   }
 
-  /** \brief send failure response to a command Interest
+  /** \brief Send failure response to a command Interest.
    */
   void
   failCommand(const Interest& interest, uint32_t code, const std::string& text, const ControlParameters& body)
@@ -96,7 +96,7 @@
   }
 
 protected: // StatusDataset
-  /** \brief send an empty dataset in reply to StatusDataset request
+  /** \brief Send an empty dataset in reply to StatusDataset request.
    *  \param prefix dataset prefix without version and segment
    *  \pre Interest for dataset has been expressed, sendDataset has not been invoked
    */
@@ -106,7 +106,7 @@
     this->sendDatasetReply(prefix, span<uint8_t>{});
   }
 
-  /** \brief send one WireEncodable in reply to StatusDataset request
+  /** \brief Send one WireEncodable in reply to StatusDataset request.
    *  \param prefix dataset prefix without version and segment
    *  \param payload payload block
    *  \note payload must fit in one Data
@@ -121,7 +121,7 @@
     this->sendDatasetReply(prefix, payload.wireEncode());
   }
 
-  /** \brief send two WireEncodables in reply to StatusDataset request
+  /** \brief Send two WireEncodables in reply to StatusDataset request.
    *  \param prefix dataset prefix without version and segment
    *  \param payload1 first vector item
    *  \param payload2 second vector item
@@ -168,7 +168,7 @@
     this->sendCommandReply(interest, ndn::nfd::ControlResponse(code, text).setBody(body));
   }
 
-  /** \brief send a payload in reply to StatusDataset request
+  /** \brief Send a payload in reply to StatusDataset request.
    *  \param name dataset prefix without version and segment
    *  \param contentArgs passed to Data::setContent
    */
@@ -211,7 +211,7 @@
 } // namespace nfd::tests
 
 /**
- * \brief Require the command in \p interest to have the expected prefix
+ * \brief Require the command in \p interest to have the expected prefix.
  * \note This must be used in the `processInterest` lambda, and the Interest must be named `interest`.
  * \return ControlParameters. The test case will fail if \p interest does not match \p expectedPrefix.
  */
diff --git a/tests/tools/ndn-autoconfig/procedure.t.cpp b/tests/tools/ndn-autoconfig/procedure.t.cpp
index d8911bb..ea5311b 100644
--- a/tests/tools/ndn-autoconfig/procedure.t.cpp
+++ b/tests/tools/ndn-autoconfig/procedure.t.cpp
@@ -107,7 +107,7 @@
   boost::asio::io_service& m_io;
 };
 
-/** \brief two-stage Procedure where the first stage succeeds and the second stage fails
+/** \brief Two-stage Procedure where the first stage succeeds and the second stage fails.
  *
  *  But the second stage shouldn't be invoked after the first stage succeeds.
  */
@@ -136,7 +136,7 @@
   boost::asio::io_service& m_io;
 };
 
-/** \brief two-stage Procedure where the first stage fails and the second stage succeeds
+/** \brief Two-stage Procedure where the first stage fails and the second stage succeeds.
  */
 class ProcedureFailureSuccess : public Procedure
 {
diff --git a/tests/tools/nfdc/mock-nfd-mgmt-fixture.hpp b/tests/tools/nfdc/mock-nfd-mgmt-fixture.hpp
index eb197a4..ab2ec39 100644
--- a/tests/tools/nfdc/mock-nfd-mgmt-fixture.hpp
+++ b/tests/tools/nfdc/mock-nfd-mgmt-fixture.hpp
@@ -39,7 +39,7 @@
 class MockNfdMgmtFixture : public nfd::tests::MockNfdMgmtFixture
 {
 protected:
-  /** \brief respond to FaceQuery requests
+  /** \brief Respond to FaceQuery requests.
    *  \retval true the Interest matches one of the defined patterns and is responded
    *  \retval false the Interest is not responded
    */
diff --git a/tests/tools/nfdc/status-fixture.hpp b/tests/tools/nfdc/status-fixture.hpp
index 7616306..c82e79b 100644
--- a/tests/tools/nfdc/status-fixture.hpp
+++ b/tests/tools/nfdc/status-fixture.hpp
@@ -51,8 +51,8 @@
   }
 };
 
-/** \brief fixture to test status fetching routines in a \p Module
- *  \tparam M a subclass of \p Module
+/** \brief Fixture to test status fetching routines in a Module.
+ *  \tparam M a subclass of Module
  *  \tparam MakeValidator a callable to make a Validator for use in \p controller;
  *                        MakeValidator()(Face&, KeyChain&) should return a unique_ptr
  *                        to Validator or its subclass
@@ -71,7 +71,7 @@
   }
 
 protected: // status fetching
-  /** \brief start fetching status
+  /** \brief Start fetching status.
    *
    *  A test case should call \p fetchStatus, \p sendDataset, and \p prepareStatusOutput
    *  in this order, and then check \p statusXml and \p statusText contain the correct outputs.
@@ -90,7 +90,7 @@
     this->advanceClocks(1_ms);
   }
 
-  /** \brief prepare status output as XML and text
+  /** \brief Prepare status output as XML and text.
    *  \pre sendDataset has been invoked
    */
   void
@@ -116,7 +116,7 @@
   output_test_stream statusText;
 };
 
-/** \brief strips leading spaces on every line in expected XML
+/** \brief Strips leading spaces on every line in expected XML.
  *
  *  This allows expected XML to be written as:
  *  \code
diff --git a/tests/tools/nfdc/status-report.t.cpp b/tests/tools/nfdc/status-report.t.cpp
index f978c57..fbff27a 100644
--- a/tests/tools/nfdc/status-report.t.cpp
+++ b/tests/tools/nfdc/status-report.t.cpp
@@ -53,9 +53,9 @@
   {
   }
 
-  /** \brief cause fetchStatus to succeed or fail
+  /** \brief Cause fetchStatus() to succeed or fail.
    *  \param res zero to succeed, non-zero to fail with specific code
-   *  \param delay duration from fetchStatus invocation to succeed or fail; must be positive
+   *  \param delay duration from fetchStatus() invocation to succeed or fail; must be positive
    */
   void
   setResult(uint32_t res, time::nanoseconds delay)
