diff --git a/tests/daemon/fw/unsolicited-data-policy.t.cpp b/tests/daemon/fw/unsolicited-data-policy.t.cpp
index 8cc7a70..e6b73ad 100644
--- a/tests/daemon/fw/unsolicited-data-policy.t.cpp
+++ b/tests/daemon/fw/unsolicited-data-policy.t.cpp
@@ -61,12 +61,12 @@
 
     tribool isFound = indeterminate;
     cs.find(Interest(data.getFullName()),
-      bind([&] { isFound = true; }),
-      bind([&] { isFound = false; }));
+            bind([&] { isFound = true; }),
+            bind([&] { isFound = false; }));
 
-    this->advanceClocks(time::milliseconds(1));
+    this->advanceClocks(1_ms);
     BOOST_REQUIRE(!indeterminate(isFound));
-    return isFound;
+    return bool(isFound);
   }
 
 protected:
diff --git a/tests/daemon/mgmt/face-manager-update-face.t.cpp b/tests/daemon/mgmt/face-manager-update-face.t.cpp
index 1be0647..4cd6fb6 100644
--- a/tests/daemon/mgmt/face-manager-update-face.t.cpp
+++ b/tests/daemon/mgmt/face-manager-update-face.t.cpp
@@ -74,7 +74,7 @@
     params.setFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED, enableReliability);
 
     if (!boost::logic::indeterminate(enableCongestionMarking)) {
-      params.setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, enableCongestionMarking);
+      params.setFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED, bool(enableCongestionMarking));
     }
 
     createFace(params);
diff --git a/tests/tools/ndn-autoconfig/procedure.t.cpp b/tests/tools/ndn-autoconfig/procedure.t.cpp
index 86dc484..ec7cf31 100644
--- a/tests/tools/ndn-autoconfig/procedure.t.cpp
+++ b/tests/tools/ndn-autoconfig/procedure.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -26,6 +26,7 @@
 #include "ndn-autoconfig/procedure.hpp"
 
 #include "../mock-nfd-mgmt-fixture.hpp"
+
 #include <boost/logic/tribool.hpp>
 
 namespace ndn {
@@ -51,12 +52,14 @@
   runOnce()
   {
     BOOST_ASSERT(procedure != nullptr);
+
     boost::logic::tribool result;
-    procedure->onComplete.connectSingleShot([&] (bool result1) { result = result1; });
+    procedure->onComplete.connectSingleShot([&] (bool res) { result = res; });
     procedure->runOnce();
     face.processEvents();
-    BOOST_CHECK_MESSAGE(!boost::logic::indeterminate(result), "onComplete is not invoked");
-    return result;
+
+    BOOST_REQUIRE_MESSAGE(!boost::logic::indeterminate(result), "onComplete was not invoked");
+    return bool(result);
   }
 
 public:
@@ -71,7 +74,8 @@
    *  \param result expected result, nullopt to cause a failued
    *  \param io io_service to asynchronously post the result
    */
-  DummyStage(const std::string& stageName, int* nCalls, const optional<FaceUri>& result, boost::asio::io_service& io)
+  DummyStage(const std::string& stageName, int* nCalls,
+             const optional<FaceUri>& result, boost::asio::io_service& io)
     : m_stageName(stageName)
     , m_nCalls(nCalls)
     , m_result(result)
