diff --git a/tests/unit-tests/management/nfd-controller.t.cpp b/tests/unit-tests/management/nfd-controller.t.cpp
index 6479cd6..2379d5c 100644
--- a/tests/unit-tests/management/nfd-controller.t.cpp
+++ b/tests/unit-tests/management/nfd-controller.t.cpp
@@ -34,7 +34,6 @@
 namespace tests {
 
 using ndn::util::DummyClientFace;
-using ndn::util::makeDummyClientFace;
 
 BOOST_AUTO_TEST_SUITE(Management)
 
@@ -42,8 +41,8 @@
 {
 protected:
   CommandFixture()
-    : face(makeDummyClientFace(io))
-    , controller(*face, keyChain)
+    : face(io)
+    , controller(face, keyChain)
     , commandSucceedCallback(bind(&CommandFixture::onCommandSucceed, this, _1))
     , commandFailCallback(bind(&CommandFixture::onCommandFail, this, _1, _2))
   {
@@ -63,7 +62,7 @@
   }
 
 protected:
-  shared_ptr<DummyClientFace> face;
+  DummyClientFace face;
   KeyChain keyChain;
   Controller controller;
 
@@ -90,8 +89,8 @@
 
   advanceClocks(time::milliseconds(1));
 
-  BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 1);
-  const Interest& requestInterest = face->sentInterests[0];
+  BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 1);
+  const Interest& requestInterest = face.sentInterests[0];
 
   FaceCreateCommand command;
   BOOST_CHECK(Name("/localhost/nfd/faces/create").isPrefixOf(requestInterest.getName()));
@@ -113,7 +112,7 @@
 
   auto responseData = util::makeData(requestInterest.getName());
   responseData->setContent(responsePayload.wireEncode());
-  face->receive(*responseData);
+  face.receive(*responseData);
 
   advanceClocks(time::milliseconds(1));
 
@@ -148,14 +147,14 @@
                          commandFailCallback));
   advanceClocks(time::milliseconds(1));
 
-  BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 1);
-  const Interest& requestInterest = face->sentInterests[0];
+  BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 1);
+  const Interest& requestInterest = face.sentInterests[0];
 
   ControlResponse responsePayload(401, "Not Authenticated");
 
   auto responseData = util::makeData(requestInterest.getName());
   responseData->setContent(responsePayload.wireEncode());
-  face->receive(*responseData);
+  face.receive(*responseData);
   advanceClocks(time::milliseconds(1));
 
   BOOST_CHECK_EQUAL(commandSucceedHistory.size(), 0);
@@ -174,8 +173,8 @@
                          commandFailCallback));
   advanceClocks(time::milliseconds(1));
 
-  BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 1);
-  const Interest& requestInterest = face->sentInterests[0];
+  BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 1);
+  const Interest& requestInterest = face.sentInterests[0];
 
   ControlParameters responseBody;
   responseBody.setUri("tcp4://192.0.2.1:6363")
@@ -186,7 +185,7 @@
 
   auto responseData = util::makeData(requestInterest.getName());
   responseData->setContent(responsePayload.wireEncode());
-  face->receive(*responseData);
+  face.receive(*responseData);
   advanceClocks(time::milliseconds(1));
 
   BOOST_CHECK_EQUAL(commandSucceedHistory.size(), 0);
@@ -204,11 +203,11 @@
                        commandFailCallback));
   advanceClocks(time::milliseconds(1));
 
-  BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 1);
-  const Interest& requestInterest = face->sentInterests[0];
+  BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 1);
+  const Interest& requestInterest = face.sentInterests[0];
 
   auto responseNack = util::makeNack(requestInterest, lp::NackReason::NO_ROUTE);
-  face->receive(responseNack);
+  face.receive(responseNack);
   advanceClocks(time::milliseconds(1));
 
   BOOST_REQUIRE_EQUAL(commandFailHistory.size(), 1);
@@ -231,8 +230,8 @@
                        options));
   advanceClocks(time::milliseconds(1));
 
-  BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 1);
-  const Interest& requestInterest = face->sentInterests[0];
+  BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 1);
+  const Interest& requestInterest = face.sentInterests[0];
 
   FaceCreateCommand command;
   BOOST_CHECK(Name("/localhop/net/example/router1/nfd/rib/register").isPrefixOf(
