diff --git a/tests/unit/net/face-uri.t.cpp b/tests/unit/net/face-uri.t.cpp
index 2b99470..c8f7d16 100644
--- a/tests/unit/net/face-uri.t.cpp
+++ b/tests/unit/net/face-uri.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2018 Regents of the University of California,
+ * Copyright (c) 2013-2020 Regents of the University of California,
  *                         Arizona Board of Regents,
  *                         Colorado State University,
  *                         University Pierre & Marie Curie, Sorbonne University,
@@ -26,9 +26,10 @@
  */
 
 #include "ndn-cxx/net/face-uri.hpp"
+#include "ndn-cxx/net/network-interface.hpp"
+#include "ndn-cxx/net/network-monitor.hpp"
 
 #include "tests/boost-test.hpp"
-#include "tests/unit/net/collect-netifs.hpp"
 #include "tests/unit/net/network-configuration-detector.hpp"
 
 namespace ndn {
@@ -37,9 +38,30 @@
 BOOST_AUTO_TEST_SUITE(Net)
 BOOST_AUTO_TEST_SUITE(TestFaceUri)
 
-class CanonizeFixture : noncopyable
+class CanonizeFixture
 {
 protected:
+  CanonizeFixture()
+  {
+    static const auto netifs = [this] {
+      net::NetworkMonitor netmon(m_io);
+      if (netmon.getCapabilities() & net::NetworkMonitor::CAP_ENUM) {
+        netmon.onEnumerationCompleted.connect([this] { m_io.stop(); });
+        m_io.run();
+#if BOOST_VERSION >= 106600
+        m_io.restart();
+#else
+        m_io.reset();
+#endif
+      }
+      return netmon.listNetworkInterfaces();
+    }();
+
+    if (!netifs.empty()) {
+      m_netif = netifs.front();
+    }
+  }
+
   void
   addTest(const std::string& request, bool shouldSucceed, const std::string& expectedUri)
   {
@@ -101,6 +123,9 @@
     BOOST_CHECK_MESSAGE(!tc->m_shouldSucceed, tc->m_message);
   }
 
+protected:
+  shared_ptr<const net::NetworkInterface> m_netif;
+
 private:
   boost::asio::io_service m_io;
   ssize_t m_nPending = 0;
@@ -205,11 +230,9 @@
   BOOST_CHECK_EQUAL(FaceUri("udp4://[2001:db8::1]:6363").isCanonical(), false);
   BOOST_CHECK_EQUAL(FaceUri("udp6://192.0.2.1:6363").isCanonical(), false);
 
-  const auto& networkInterfaces = ndn::net::tests::collectNetworkInterfaces();
-  if (!networkInterfaces.empty()) {
-    const auto& netif = networkInterfaces.front();
-    auto name = netif->getName();
-    auto index = to_string(netif->getIndex());
+  if (m_netif) {
+    auto name = m_netif->getName();
+    auto index = to_string(m_netif->getIndex());
 
     BOOST_CHECK_EQUAL(FaceUri("udp6://[fe80::1%" + name + "]:6363").isCanonical(), true);
     BOOST_CHECK_EQUAL(FaceUri("udp6://[fe80::1%" + index + "]:6363").isCanonical(), false);
@@ -270,11 +293,9 @@
   // IPv4 used with udp6 protocol - not canonical
   addTest("udp6://192.0.2.1:6363", false, "");
 
-  const auto& networkInterfaces = ndn::net::tests::collectNetworkInterfaces();
-  if (!networkInterfaces.empty()) {
-    const auto& netif = networkInterfaces.front();
-    auto name = netif->getName();
-    auto index = to_string(netif->getIndex());
+  if (m_netif) {
+    auto name = m_netif->getName();
+    auto index = to_string(m_netif->getIndex());
 
     addTest("udp6://[fe80::1068:dddb:fe26:fe3f%25" + name + "]:6363", true,
             "udp6://[fe80::1068:dddb:fe26:fe3f%" + name + "]:6363");
@@ -342,11 +363,9 @@
   BOOST_CHECK_EQUAL(FaceUri("tcp4://[2001:db8::1]:6363").isCanonical(), false);
   BOOST_CHECK_EQUAL(FaceUri("tcp6://192.0.2.1:6363").isCanonical(), false);
 
-  const auto& networkInterfaces = ndn::net::tests::collectNetworkInterfaces();
-  if (!networkInterfaces.empty()) {
-    const auto& netif = networkInterfaces.front();
-    auto name = netif->getName();
-    auto index = to_string(netif->getIndex());
+  if (m_netif) {
+    auto name = m_netif->getName();
+    auto index = to_string(m_netif->getIndex());
 
     BOOST_CHECK_EQUAL(FaceUri("tcp6://[fe80::1%" + name + "]:6363").isCanonical(), true);
     BOOST_CHECK_EQUAL(FaceUri("tcp6://[fe80::1%" + index + "]:6363").isCanonical(), false);
@@ -380,11 +399,9 @@
   // IPv6 used with tcp4 protocol - not canonical
   addTest("tcp4://[2001:db8::1]:6363", false, "");
 
-  const auto& networkInterfaces = ndn::net::tests::collectNetworkInterfaces();
-  if (!networkInterfaces.empty()) {
-    const auto& netif = networkInterfaces.front();
-    auto name = netif->getName();
-    auto index = to_string(netif->getIndex());
+  if (m_netif) {
+    auto name = m_netif->getName();
+    auto index = to_string(m_netif->getIndex());
 
     addTest("tcp6://[fe80::1068:dddb:fe26:fe3f%25" + name + "]:6363", true,
             "tcp6://[fe80::1068:dddb:fe26:fe3f%" + name + "]:6363");
