diff --git a/tests/publisher/publisher-fixture.hpp b/tests/publisher/publisher-fixture.hpp
index b187ffb..43c61b7 100644
--- a/tests/publisher/publisher-fixture.hpp
+++ b/tests/publisher/publisher-fixture.hpp
@@ -56,7 +56,7 @@
   NextHop
   createNextHop(const std::string& faceUri, double cost)
   {
-    return {faceUri, cost};
+    return {ndn::FaceUri(faceUri), cost};
   }
 
   CoordinateLsa
diff --git a/tests/route/test-fib.cpp b/tests/route/test-fib.cpp
index 7bbfccb..d90d125 100644
--- a/tests/route/test-fib.cpp
+++ b/tests/route/test-fib.cpp
@@ -31,6 +31,16 @@
 namespace nlsr {
 namespace test {
 
+static const ndn::Name router1Name = "/ndn/router1";
+static const ndn::Name router2Name = "/ndn/router2";
+static const ndn::Name router3Name = "/ndn/router3";
+static const ndn::FaceUri router1FaceUri("udp4://10.0.0.1:6363");
+static const ndn::FaceUri router2FaceUri("udp4://10.0.0.2:6363");
+static const ndn::FaceUri router3FaceUri("udp4://10.0.0.3:6363");
+constexpr uint32_t router1FaceId = 1;
+constexpr uint32_t router2FaceId = 2;
+constexpr uint32_t router3FaceId = 3;
+
 class FibFixture : public IoKeyChainFixture
 {
 public:
@@ -41,13 +51,13 @@
   {
     advanceClocks(1_s);
 
-    Adjacent neighbor1(router1Name, ndn::FaceUri(router1FaceUri), 0, Adjacent::STATUS_ACTIVE, 0, router1FaceId);
+    Adjacent neighbor1(router1Name, router1FaceUri, 0, Adjacent::STATUS_ACTIVE, 0, router1FaceId);
     adjacencies.insert(neighbor1);
 
-    Adjacent neighbor2(router2Name, ndn::FaceUri(router2FaceUri), 0, Adjacent::STATUS_ACTIVE, 0, router2FaceId);
+    Adjacent neighbor2(router2Name, router2FaceUri, 0, Adjacent::STATUS_ACTIVE, 0, router2FaceId);
     adjacencies.insert(neighbor2);
 
-    Adjacent neighbor3(router3Name, ndn::FaceUri(router3FaceUri), 0, Adjacent::STATUS_ACTIVE, 0, router3FaceId);
+    Adjacent neighbor3(router3Name, router3FaceUri, 0, Adjacent::STATUS_ACTIVE, 0, router3FaceId);
     adjacencies.insert(neighbor3);
 
     conf.setMaxFacesPerPrefix(2);
@@ -81,32 +91,8 @@
   AdjacencyList& adjacencies;
   Fib fib;
   std::vector<ndn::Interest>& interests;
-
-  static const ndn::Name router1Name;
-  static const ndn::Name router2Name;
-  static const ndn::Name router3Name;
-
-  static const std::string router1FaceUri;
-  static const std::string router2FaceUri;
-  static const std::string router3FaceUri;
-
-  static const uint32_t router1FaceId;
-  static const uint32_t router2FaceId;
-  static const uint32_t router3FaceId;
 };
 
-const ndn::Name FibFixture::router1Name = "/ndn/router1";
-const ndn::Name FibFixture::router2Name = "/ndn/router2";
-const ndn::Name FibFixture::router3Name = "/ndn/router3";
-
-const std::string FibFixture::router1FaceUri = "udp4://10.0.0.1";
-const std::string FibFixture::router2FaceUri = "udp4://10.0.0.2";
-const std::string FibFixture::router3FaceUri = "udp4://10.0.0.3";
-
-const uint32_t FibFixture::router1FaceId = 1;
-const uint32_t FibFixture::router2FaceId = 2;
-const uint32_t FibFixture::router3FaceId = 3;
-
 BOOST_FIXTURE_TEST_SUITE(TestFib, FibFixture)
 
 BOOST_AUTO_TEST_CASE(NextHopsAdd)
@@ -367,16 +353,16 @@
 
   // Wustl advertises /test
   NexthopList nhl1;
-  nhl1.addNextHop(NextHop("udp4://10.0.0.13:6363", 28));
-  nhl1.addNextHop(NextHop("udp4://10.0.0.9:6363", 38));
-  nhl1.addNextHop(NextHop("udp4://10.0.0.26:6363", 44));
+  nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.13:6363"), 28));
+  nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.9:6363"), 38));
+  nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.26:6363"), 44));
   fib.update("/test", nhl1);
 
   // Memphis advertises /test
   NexthopList nhl2;
-  nhl2.addNextHop(NextHop("udp4://10.0.0.9:6363", 21));
-  nhl2.addNextHop(NextHop("udp4://10.0.0.13:6363", 26));
-  nhl2.addNextHop(NextHop("udp4://10.0.0.26:6363", 42));
+  nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.9:6363"), 21));
+  nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.13:6363"), 26));
+  nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.26:6363"), 42));
   fib.update("/test", nhl2);
 
   advanceClocks(10_ms);
diff --git a/tests/route/test-hyperbolic-calculator.cpp b/tests/route/test-hyperbolic-calculator.cpp
index 10a401e..0d4dd5e 100644
--- a/tests/route/test-hyperbolic-calculator.cpp
+++ b/tests/route/test-hyperbolic-calculator.cpp
@@ -33,9 +33,15 @@
 namespace nlsr {
 namespace test {
 
-using std::shared_ptr;
 using ndn::time::system_clock;
 
+static const ndn::Name ROUTER_A_NAME = "/ndn/router/a";
+static const ndn::Name ROUTER_B_NAME = "/ndn/router/b";
+static const ndn::Name ROUTER_C_NAME = "/ndn/router/c";
+static const ndn::FaceUri ROUTER_A_FACE("udp4://10.0.0.1:6363");
+static const ndn::FaceUri ROUTER_B_FACE("udp4://10.0.0.2:6363");
+static const ndn::FaceUri ROUTER_C_FACE("udp4://10.0.0.3:6363");
+
 constexpr system_clock::time_point MAX_TIME = system_clock::time_point::max();
 
 class HyperbolicCalculatorFixture : public IoKeyChainFixture
@@ -112,8 +118,8 @@
     NexthopList& bHopList = entryB->getNexthopList();
     BOOST_REQUIRE_EQUAL(bHopList.getNextHops().size(), 2);
 
-    for (std::set<NextHop, NextHopComparator>::iterator it = bHopList.begin(); it != bHopList.end(); ++it) {
-      std::string faceUri = it->getConnectingFaceUri();
+    for (auto it = bHopList.begin(); it != bHopList.end(); ++it) {
+      auto faceUri = it->getConnectingFaceUri();
       uint64_t cost = it->getRouteCostAsAdjustedInteger();
 
       BOOST_CHECK((faceUri == ROUTER_B_FACE && cost == 0) ||
@@ -126,8 +132,8 @@
     NexthopList& cHopList = entryC->getNexthopList();
     BOOST_REQUIRE_EQUAL(cHopList.getNextHops().size(), 2);
 
-    for (std::set<NextHop, NextHopComparator>::iterator it = cHopList.begin(); it != cHopList.end(); ++it) {
-      std::string faceUri = it->getConnectingFaceUri();
+    for (auto it = cHopList.begin(); it != cHopList.end(); ++it) {
+      auto faceUri = it->getConnectingFaceUri();
       uint64_t cost = it->getRouteCostAsAdjustedInteger();
 
       BOOST_CHECK((faceUri == ROUTER_B_FACE && cost == applyHyperbolicFactorAndRound(expectedCost)) ||
@@ -153,24 +159,8 @@
   RoutingTable& routingTable;
   AdjacencyList& adjacencies;
   Lsdb& lsdb;
-
-  static const ndn::Name ROUTER_A_NAME;
-  static const ndn::Name ROUTER_B_NAME;
-  static const ndn::Name ROUTER_C_NAME;
-
-  static const std::string ROUTER_A_FACE;
-  static const std::string ROUTER_B_FACE;
-  static const std::string ROUTER_C_FACE;
 };
 
-const ndn::Name HyperbolicCalculatorFixture::ROUTER_A_NAME = "/ndn/router/a";
-const ndn::Name HyperbolicCalculatorFixture::ROUTER_B_NAME = "/ndn/router/b";
-const ndn::Name HyperbolicCalculatorFixture::ROUTER_C_NAME = "/ndn/router/c";
-
-const std::string HyperbolicCalculatorFixture::ROUTER_A_FACE = "udp4://10.0.0.1";
-const std::string HyperbolicCalculatorFixture::ROUTER_B_FACE = "udp4://10.0.0.2";
-const std::string HyperbolicCalculatorFixture::ROUTER_C_FACE = "udp4://10.0.0.3";
-
 BOOST_FIXTURE_TEST_SUITE(TestHyperbolicRoutingCalculator, HyperbolicCalculatorFixture)
 
 BOOST_AUTO_TEST_CASE(Basic)
diff --git a/tests/route/test-link-state-calculator.cpp b/tests/route/test-link-state-calculator.cpp
index 0a4c522..73421b0 100644
--- a/tests/route/test-link-state-calculator.cpp
+++ b/tests/route/test-link-state-calculator.cpp
@@ -35,6 +35,15 @@
 namespace test {
 
 constexpr ndn::time::system_clock::time_point MAX_TIME = ndn::time::system_clock::time_point::max();
+static const ndn::Name ROUTER_A_NAME = "/ndn/site/%C1.Router/this-router";
+static const ndn::Name ROUTER_B_NAME = "/ndn/site/%C1.Router/b";
+static const ndn::Name ROUTER_C_NAME = "/ndn/site/%C1.Router/c";
+static const ndn::FaceUri ROUTER_A_FACE("udp4://10.0.0.1");
+static const ndn::FaceUri ROUTER_B_FACE("udp4://10.0.0.2");
+static const ndn::FaceUri ROUTER_C_FACE("udp4://10.0.0.3");
+constexpr double LINK_AB_COST = 5;
+constexpr double LINK_AC_COST = 10;
+constexpr double LINK_BC_COST = 17;
 
 class LinkStateCalculatorFixture : public IoKeyChainFixture
 {
@@ -53,9 +62,9 @@
   // Triangle topology with routers A, B, C connected
   void setUpTopology()
   {
-    Adjacent a(ROUTER_A_NAME, ndn::FaceUri(ROUTER_A_FACE), 0, Adjacent::STATUS_ACTIVE, 0, 0);
-    Adjacent b(ROUTER_B_NAME, ndn::FaceUri(ROUTER_B_FACE), 0, Adjacent::STATUS_ACTIVE, 0, 0);
-    Adjacent c(ROUTER_C_NAME, ndn::FaceUri(ROUTER_C_FACE), 0, Adjacent::STATUS_ACTIVE, 0, 0);
+    Adjacent a(ROUTER_A_NAME, ROUTER_A_FACE, 0, Adjacent::STATUS_ACTIVE, 0, 0);
+    Adjacent b(ROUTER_B_NAME, ROUTER_B_FACE, 0, Adjacent::STATUS_ACTIVE, 0, 0);
+    Adjacent c(ROUTER_C_NAME, ROUTER_C_FACE, 0, Adjacent::STATUS_ACTIVE, 0, 0);
 
     // Router A
     b.setLinkCost(LINK_AB_COST);
@@ -103,32 +112,8 @@
 
   RoutingTable& routingTable;
   Lsdb& lsdb;
-
-  static const ndn::Name ROUTER_A_NAME;
-  static const ndn::Name ROUTER_B_NAME;
-  static const ndn::Name ROUTER_C_NAME;
-
-  static const std::string ROUTER_A_FACE;
-  static const std::string ROUTER_B_FACE;
-  static const std::string ROUTER_C_FACE;
-
-  static const double LINK_AB_COST;
-  static const double LINK_AC_COST;
-  static const double LINK_BC_COST;
 };
 
-const ndn::Name LinkStateCalculatorFixture::ROUTER_A_NAME = "/ndn/site/%C1.Router/this-router";
-const ndn::Name LinkStateCalculatorFixture::ROUTER_B_NAME = "/ndn/site/%C1.Router/b";
-const ndn::Name LinkStateCalculatorFixture::ROUTER_C_NAME = "/ndn/site/%C1.Router/c";
-
-const std::string LinkStateCalculatorFixture::ROUTER_A_FACE = "udp4://10.0.0.1";
-const std::string LinkStateCalculatorFixture::ROUTER_B_FACE = "udp4://10.0.0.2";
-const std::string LinkStateCalculatorFixture::ROUTER_C_FACE = "udp4://10.0.0.3";
-
-const double LinkStateCalculatorFixture::LINK_AB_COST = 5;
-const double LinkStateCalculatorFixture::LINK_AC_COST = 10;
-const double LinkStateCalculatorFixture::LINK_BC_COST = 17;
-
 BOOST_FIXTURE_TEST_SUITE(TestLinkStateRoutingCalculator, LinkStateCalculatorFixture)
 
 BOOST_AUTO_TEST_CASE(Basic)
@@ -144,7 +129,7 @@
   BOOST_REQUIRE_EQUAL(bHopList.getNextHops().size(), 2);
 
   for (const NextHop& hop : bHopList) {
-    std::string faceUri = hop.getConnectingFaceUri();
+    auto faceUri = hop.getConnectingFaceUri();
     uint64_t cost = hop.getRouteCostAsAdjustedInteger();
 
     BOOST_CHECK((faceUri == ROUTER_B_FACE && cost == LINK_AB_COST) ||
@@ -160,7 +145,7 @@
   BOOST_REQUIRE_EQUAL(cHopList.getNextHops().size(), 2);
 
   for (const NextHop& hop : cHopList) {
-    std::string faceUri = hop.getConnectingFaceUri();
+    auto faceUri = hop.getConnectingFaceUri();
     uint64_t cost = hop.getRouteCostAsAdjustedInteger();
 
     BOOST_CHECK((faceUri == ROUTER_C_FACE && cost == LINK_AC_COST) ||
@@ -192,7 +177,7 @@
   BOOST_REQUIRE_EQUAL(bHopList.getNextHops().size(), 2);
 
   for (const NextHop& hop : bHopList) {
-    std::string faceUri = hop.getConnectingFaceUri();
+    auto faceUri = hop.getConnectingFaceUri();
     uint64_t cost = hop.getRouteCostAsAdjustedInteger();
 
     BOOST_CHECK((faceUri == ROUTER_B_FACE && cost == LINK_AB_COST) ||
@@ -208,7 +193,7 @@
   BOOST_REQUIRE_EQUAL(cHopList.getNextHops().size(), 2);
 
   for (const NextHop& hop : cHopList) {
-    std::string faceUri = hop.getConnectingFaceUri();
+    auto faceUri = hop.getConnectingFaceUri();
     uint64_t cost = hop.getRouteCostAsAdjustedInteger();
 
     BOOST_CHECK((faceUri == ROUTER_C_FACE && cost == LINK_AC_COST) ||
diff --git a/tests/route/test-name-prefix-table.cpp b/tests/route/test-name-prefix-table.cpp
index 839c874..6181296 100644
--- a/tests/route/test-name-prefix-table.cpp
+++ b/tests/route/test-name-prefix-table.cpp
@@ -274,9 +274,9 @@
 BOOST_FIXTURE_TEST_CASE(RoutingTableUpdate, NamePrefixTableFixture)
 {
   const ndn::Name destination = ndn::Name{"/ndn/destination1"};
-  NextHop hop1{"upd4://10.0.0.1", 0};
-  NextHop hop2{"udp4://10.0.0.2", 1};
-  NextHop hop3{"udp4://10.0.0.3", 2};
+  NextHop hop1{ndn::FaceUri("upd4://10.0.0.1"), 0};
+  NextHop hop2{ndn::FaceUri("upd4://10.0.0.2"), 1};
+  NextHop hop3{ndn::FaceUri("upd4://10.0.0.3"), 2};
   const NamePrefixTableEntry entry1{"/ndn/router1"};
   npt.addEntry(entry1.getNamePrefix(), destination);
 
diff --git a/tests/route/test-nexthop-list.cpp b/tests/route/test-nexthop-list.cpp
index 73108dc..5801104 100644
--- a/tests/route/test-nexthop-list.cpp
+++ b/tests/route/test-nexthop-list.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  The University of Memphis,
+ * Copyright (c) 2014-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -86,14 +86,14 @@
 
 BOOST_AUTO_TEST_CASE(TieBreaker)
 {
-  // equal-cost hops are sorted lexicographically
+  // equal-cost hops are sorted consistently
   NextHop hopA;
   hopA.setRouteCost(25);
-  hopA.setConnectingFaceUri("AAAZZ");
+  hopA.setConnectingFaceUri(ndn::FaceUri("udp4://192.168.3.1:6363"));
 
   NextHop hopZ;
   hopZ.setRouteCost(25);
-  hopZ.setConnectingFaceUri("ZZA");
+  hopZ.setConnectingFaceUri(ndn::FaceUri("udp4://192.168.3.9:6363"));
 
   NexthopList list;
   list.addNextHop(hopA);
@@ -108,32 +108,15 @@
 
   it = list.begin();
   BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), hopA.getConnectingFaceUri());
-
-
-  // equal-cost and lexicographically equal hops are sorted by the length of their face uris
-  NextHop longUriHop;
-  longUriHop.setRouteCost(25);
-  longUriHop.setConnectingFaceUri("AAAAAA");
-
-  NextHop shortUriHop;
-  shortUriHop.setRouteCost(25);
-  shortUriHop.setConnectingFaceUri("AAA");
-
-  list.clear();
-  list.addNextHop(longUriHop);
-  list.addNextHop(shortUriHop);
-
-  it = list.begin();
-  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), shortUriHop.getConnectingFaceUri());
 }
 
 BOOST_AUTO_TEST_CASE(SortOnAddAndRemove)
 {
   NexthopList list;
 
-  NextHop hopA("A", 10);
-  NextHop hopB("B", 5);
-  NextHop hopC("C", 25);
+  NextHop hopA(ndn::FaceUri("udp4://192.168.3.1:6363"), 10);
+  NextHop hopB(ndn::FaceUri("udp4://192.168.3.2:6363"), 5);
+  NextHop hopC(ndn::FaceUri("udp4://192.168.3.3:6363"), 25);
 
   list.addNextHop(hopA);
   list.addNextHop(hopB);
@@ -168,8 +151,8 @@
 {
   NexthopList list;
 
-  NextHop hopA("udp4://10.0.0.1:6363", 10);
-  NextHop hopB("udp4://10.0.0.1:6363", 5);
+  NextHop hopA(ndn::FaceUri("udp4://10.0.0.1:6363"), 10);
+  NextHop hopB(ndn::FaceUri("udp4://10.0.0.1:6363"), 5);
 
   list.addNextHop(hopA);
   list.addNextHop(hopB);
@@ -191,33 +174,32 @@
   // If default sorter is used then difference results in
   // the same hops to remove as those that were added
   NexthopList nhl1;
-  nhl1.addNextHop(NextHop("udp4://10.0.0.13:6363", 28));
-  nhl1.addNextHop(NextHop("udp4://10.0.0.9:6363", 38));
-  nhl1.addNextHop(NextHop("udp4://10.0.0.26:6363", 44));
+  nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.13:6363"), 28));
+  nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.9:6363"), 38));
+  nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.26:6363"), 44));
 
   NexthopList nhl2;
-  nhl2.addNextHop(NextHop("udp4://10.0.0.9:6363", 21));
-  nhl2.addNextHop(NextHop("udp4://10.0.0.13:6363", 26));
-  nhl2.addNextHop(NextHop("udp4://10.0.0.26:6363", 42));
+  nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.9:6363"), 21));
+  nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.13:6363"), 26));
+  nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.26:6363"), 42));
 
-  std::set<NextHop, NextHopComparator> hopsToRemove;
+  std::set<NextHop> hopsToRemove;
   std::set_difference(nhl2.begin(), nhl2.end(),
                       nhl1.begin(), nhl1.end(),
-                      std::inserter(hopsToRemove, hopsToRemove.begin()),
-                      NextHopComparator());
+                      std::inserter(hopsToRemove, hopsToRemove.begin()));
 
   BOOST_CHECK_EQUAL(hopsToRemove.size(), 3);
 
   // Sorted by FaceUri
   NextHopsUriSortedSet nhs1;
-  nhs1.addNextHop(NextHop("udp4://10.0.0.13:6363", 28));
-  nhs1.addNextHop(NextHop("udp4://10.0.0.9:6363", 38));
-  nhs1.addNextHop(NextHop("udp4://10.0.0.26:6363", 44));
+  nhs1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.13:6363"), 28));
+  nhs1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.9:6363"), 38));
+  nhs1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.26:6363"), 44));
 
   NextHopsUriSortedSet nhs2;
-  nhs2.addNextHop(NextHop("udp4://10.0.0.9:6363", 21));
-  nhs2.addNextHop(NextHop("udp4://10.0.0.13:6363", 26));
-  nhs2.addNextHop(NextHop("udp4://10.0.0.26:6363", 42));
+  nhs2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.9:6363"), 21));
+  nhs2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.13:6363"), 26));
+  nhs2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.26:6363"), 42));
 
   std::set<NextHop, NextHopUriSortedComparator> hopsToRemove2;
   std::set_difference(nhs2.begin(), nhs2.end(),
diff --git a/tests/route/test-nexthop.cpp b/tests/route/test-nexthop.cpp
index 3ba3539..9d80c1f 100644
--- a/tests/route/test-nexthop.cpp
+++ b/tests/route/test-nexthop.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2023,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -26,6 +26,9 @@
 
 BOOST_AUTO_TEST_SUITE(TestNexthop)
 
+static const ndn::FaceUri faceUri1("udp4://192.168.3.1:6363");
+static const ndn::FaceUri faceUri2("udp4://192.168.3.2:6363");
+
 static double
 getHyperbolicAdjustedDecimal(unsigned int i)
 {
@@ -41,16 +44,23 @@
 BOOST_AUTO_TEST_CASE(LinkStateSetAndGet)
 {
   NextHop hop1;
-  hop1.setConnectingFaceUri("udp://test/uri");
+  hop1.setConnectingFaceUri(faceUri1);
   hop1.setRouteCost(12.34);
-
-  BOOST_CHECK_EQUAL(hop1.getConnectingFaceUri(), "udp://test/uri");
+  BOOST_CHECK_EQUAL(hop1.getConnectingFaceUri(), faceUri1);
   BOOST_CHECK_EQUAL(hop1.getRouteCost(), 12.34);
   BOOST_CHECK_EQUAL(hop1.getRouteCostAsAdjustedInteger(), 12);
 
-  NextHop hop2;
+  NextHop hop2(faceUri2, 12.34);
+  BOOST_CHECK_NE(hop1, hop2);
+  BOOST_CHECK_LT(hop1, hop2);
+  BOOST_CHECK_LE(hop1, hop2);
+  BOOST_CHECK_GT(hop2, hop1);
+  BOOST_CHECK_GE(hop2, hop1);
 
-  hop2.setRouteCost(12.34);
+  hop2.setConnectingFaceUri(faceUri1);
+  BOOST_CHECK_EQUAL(hop1, hop2);
+  BOOST_CHECK_LE(hop1, hop2);
+  BOOST_CHECK_GE(hop2, hop1);
   BOOST_CHECK_EQUAL(hop1.getRouteCostAsAdjustedInteger(), hop2.getRouteCostAsAdjustedInteger());
 }
 
@@ -58,31 +68,37 @@
 {
   NextHop hop1;
   hop1.setHyperbolic(true);
-  hop1.setConnectingFaceUri("udp://test/uri");
+  hop1.setConnectingFaceUri(faceUri1);
   hop1.setRouteCost(12.34);
-
-  BOOST_CHECK_EQUAL(hop1.getConnectingFaceUri(), "udp://test/uri");
+  BOOST_CHECK_EQUAL(hop1.getConnectingFaceUri(), faceUri1);
   BOOST_CHECK_EQUAL(hop1.getRouteCost(), 12.34);
   BOOST_CHECK_EQUAL(hop1.getRouteCostAsAdjustedInteger(), applyHyperbolicFactorAndRound(12.34));
 
-  NextHop hop2;
+  NextHop hop2(faceUri2, 12.34);
   hop2.setHyperbolic(true);
+  BOOST_CHECK_NE(hop1, hop2);
+  BOOST_CHECK_LT(hop1, hop2);
+  BOOST_CHECK_LE(hop1, hop2);
+  BOOST_CHECK_GT(hop2, hop1);
+  BOOST_CHECK_GE(hop2, hop1);
 
-  hop2.setRouteCost(12.34);
+  hop2.setConnectingFaceUri(faceUri1);
+  BOOST_CHECK_EQUAL(hop1, hop2);
   BOOST_CHECK_EQUAL(hop1.getRouteCostAsAdjustedInteger(), hop2.getRouteCostAsAdjustedInteger());
 
   hop2.setRouteCost(12.35);
-  BOOST_CHECK(hop1.getRouteCostAsAdjustedInteger() < hop2.getRouteCostAsAdjustedInteger());
+  BOOST_CHECK_LT(hop1, hop2);
+  BOOST_CHECK_LT(hop1.getRouteCostAsAdjustedInteger(), hop2.getRouteCostAsAdjustedInteger());
 }
 
 BOOST_AUTO_TEST_CASE(HyperbolicRound)
 {
   NextHop hop1;
   hop1.setHyperbolic(true);
-  hop1.setConnectingFaceUri("udp://test/uri");
+  hop1.setConnectingFaceUri(faceUri1);
   hop1.setRouteCost(1 + getHyperbolicAdjustedDecimal(6));
 
-  BOOST_CHECK_EQUAL(hop1.getConnectingFaceUri(), "udp://test/uri");
+  BOOST_CHECK_EQUAL(hop1.getConnectingFaceUri(), faceUri1);
   BOOST_CHECK_EQUAL(hop1.getRouteCost(), 1 + getHyperbolicAdjustedDecimal(6));
   BOOST_CHECK_EQUAL(hop1.getRouteCostAsAdjustedInteger(),
                     applyHyperbolicFactorAndRound((1 + getHyperbolicAdjustedDecimal(6))));
@@ -97,47 +113,47 @@
   BOOST_CHECK_EQUAL(hop1.getRouteCostAsAdjustedInteger(), hop2.getRouteCostAsAdjustedInteger());
 
   hop2.setRouteCost(1 + getHyperbolicAdjustedDecimal(4));
-  BOOST_CHECK(hop1.getRouteCostAsAdjustedInteger() > hop2.getRouteCostAsAdjustedInteger());
+  BOOST_CHECK_GT(hop1.getRouteCostAsAdjustedInteger(), hop2.getRouteCostAsAdjustedInteger());
 }
 
 const uint8_t NexthopData[] =
 {
   // Header
-  0x8f, 0x1d,
+  0x8f, 0x23,
   // Uri
-  0x8d, 0x11, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f,
-  0x70, 0x2f, 0x74, 0x6c, 0x76,
+  0x8d, 0x17, 0x75, 0x64, 0x70, 0x34, 0x3a, 0x2f, 0x2f, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38,
+  0x2e, 0x33, 0x2e, 0x31, 0x3a, 0x36, 0x33, 0x36, 0x33,
   // Cost
   0x86, 0x08, 0x3f, 0xfa, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66
 };
 
-BOOST_AUTO_TEST_CASE(NexthopEncode)
+BOOST_AUTO_TEST_CASE(Encode)
 {
   NextHop nexthops1;
-  nexthops1.setConnectingFaceUri("/test/nexthop/tlv");
+  nexthops1.setConnectingFaceUri(faceUri1);
   nexthops1.setRouteCost(1.65);
 
   BOOST_TEST(nexthops1.wireEncode() == NexthopData, boost::test_tools::per_element());
 }
 
-BOOST_AUTO_TEST_CASE(NexthopDecode)
+BOOST_AUTO_TEST_CASE(Decode)
 {
   NextHop nexthops1;
   nexthops1.wireDecode(ndn::Block{NexthopData});
 
-  BOOST_REQUIRE_EQUAL(nexthops1.getConnectingFaceUri(), "/test/nexthop/tlv");
+  BOOST_REQUIRE_EQUAL(nexthops1.getConnectingFaceUri(), faceUri1);
   BOOST_REQUIRE_EQUAL(nexthops1.getRouteCost(), 1.65);
 }
 
-BOOST_AUTO_TEST_CASE(AdjacencyOutputStream)
+BOOST_AUTO_TEST_CASE(OutputStream)
 {
   NextHop nexthops1;
-  nexthops1.setConnectingFaceUri("/test/nexthop/tlv");
+  nexthops1.setConnectingFaceUri(faceUri1);
   nexthops1.setRouteCost(99);
 
   std::ostringstream os;
   os << nexthops1;
-  BOOST_CHECK_EQUAL(os.str(), "NextHop(Uri: /test/nexthop/tlv, Cost: 99)");
+  BOOST_CHECK_EQUAL(os.str(), "NextHop(Uri: udp4://192.168.3.1:6363, Cost: 99)");
 }
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/route/test-routing-table-entry.cpp b/tests/route/test-routing-table-entry.cpp
index f30e17e..9d685ae 100644
--- a/tests/route/test-routing-table-entry.cpp
+++ b/tests/route/test-routing-table-entry.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2023,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -33,20 +33,31 @@
   BOOST_CHECK_EQUAL(rte1.getDestination(), "router1");
 }
 
-const uint8_t RoutingTableEntryWithNexthopsData[] = {
+static const ndn::FaceUri NEXTHOP1("udp4://192.168.3.1:6363");
+static const ndn::FaceUri NEXTHOP2("udp4://192.168.3.2:6363");
+
+static const uint8_t RoutingTableEntryWithNexthopsData[] = {
   // Header
-  0x91, 0x35,
+  0x91, 0x53,
   // Destination Name
-  0x07, 0x07, 0x08, 0x05, 0x64, 0x65, 0x73, 0x74, 0x31, 0x8f, 0x14,
+  0x07, 0x07, 0x08, 0x05, 0x64, 0x65, 0x73, 0x74, 0x31,
   // Nexthop
-  0x8d, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x31, 0x86, 0x08, 0x3f, 0xfa,
-  0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x8f, 0x14, 0x8d, 0x08,
+  0x8f, 0x23,
+  // Nexthop.Uri
+  0x8d, 0x17, 0x75, 0x64, 0x70, 0x34, 0x3a, 0x2f, 0x2f, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38,
+  0x2e, 0x33, 0x2e, 0x31, 0x3a, 0x36, 0x33, 0x36, 0x33,
+  // Nexthop.CostDouble
+  0x86, 0x08, 0x3f, 0xfa, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
   // Nexthop
-  0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x32, 0x86, 0x08, 0x3f, 0xfa, 0x66, 0x66,
-  0x66, 0x66, 0x66, 0x66
+  0x8f, 0x23,
+  // Nexthop.Uri
+  0x8d, 0x17, 0x75, 0x64, 0x70, 0x34, 0x3a, 0x2f, 0x2f, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38,
+  0x2e, 0x33, 0x2e, 0x32, 0x3a, 0x36, 0x33, 0x36, 0x33,
+  // Nexthop.CostDouble
+  0x86, 0x08, 0x3f, 0xfa, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
 };
 
-const uint8_t RoutingTableEntryWithoutNexthopsData[] = {
+static const uint8_t RoutingTableEntryWithoutNexthopsData[] = {
   // Header
   0x91, 0x09,
   // Destination Name
@@ -58,12 +69,12 @@
   RoutingTableEntry rte(ndn::Name("dest1"));
 
   NextHop nexthops1;
-  nexthops1.setConnectingFaceUri("nexthop1");
+  nexthops1.setConnectingFaceUri(NEXTHOP1);
   nexthops1.setRouteCost(1.65);
   rte.getNexthopList().addNextHop(nexthops1);
 
   NextHop nexthops2;
-  nexthops2.setConnectingFaceUri("nexthop2");
+  nexthops2.setConnectingFaceUri(NEXTHOP2);
   nexthops2.setRouteCost(1.65);
   rte.getNexthopList().addNextHop(nexthops2);
 
@@ -78,11 +89,11 @@
 
   BOOST_CHECK(rte.getNexthopList().size() != 0);
   auto it = rte.getNexthopList().begin();
-  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), "nexthop1");
+  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), NEXTHOP1);
   BOOST_CHECK_EQUAL(it->getRouteCost(), 1.65);
 
   it++;
-  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), "nexthop2");
+  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), NEXTHOP2);
   BOOST_CHECK_EQUAL(it->getRouteCost(), 1.65);
 }
 
@@ -105,45 +116,41 @@
   RoutingTableEntry rte(ndn::Name("dest1"));
 
   NextHop nexthops1;
-  nexthops1.setConnectingFaceUri("nexthop1");
+  nexthops1.setConnectingFaceUri(NEXTHOP1);
   nexthops1.setRouteCost(99);
   rte.getNexthopList().addNextHop(nexthops1);
 
   BOOST_CHECK_EQUAL(rte.getNexthopList().size(), 1);
 
   auto it = rte.getNexthopList().begin();
-  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), "nexthop1");
+  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), NEXTHOP1);
   BOOST_CHECK_EQUAL(it->getRouteCost(), 99);
 
   rte.getNexthopList().clear();
   BOOST_CHECK_EQUAL(rte.getNexthopList().size(), 0);
 
   NextHop nexthops2;
-  nexthops2.setConnectingFaceUri("nexthop2");
+  nexthops2.setConnectingFaceUri(NEXTHOP2);
   nexthops2.setRouteCost(99);
   rte.getNexthopList().addNextHop(nexthops2);
 
   BOOST_CHECK_EQUAL(rte.getNexthopList().size(), 1);
   it =  rte.getNexthopList().begin();
-  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), "nexthop2");
+  BOOST_CHECK_EQUAL(it->getConnectingFaceUri(), NEXTHOP2);
   BOOST_CHECK_EQUAL(it->getRouteCost(), 99);
 }
 
 BOOST_AUTO_TEST_CASE(OutputStream)
 {
   RoutingTableEntry rte(ndn::Name("dest1"));
-
-  NextHop nexthops1;
-  nexthops1.setConnectingFaceUri("nexthop1");
-  nexthops1.setRouteCost(99);
-  rte.getNexthopList().addNextHop(nexthops1);
+  rte.getNexthopList().addNextHop({NEXTHOP1, 99});
 
   std::ostringstream os;
   os << rte;
 
   BOOST_CHECK_EQUAL(os.str(),
                     "  Destination: /dest1\n"
-                    "    NextHop(Uri: nexthop1, Cost: 99)\n");
+                    "    NextHop(Uri: udp4://192.168.3.1:6363, Cost: 99)\n");
 }
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/route/test-routing-table-pool-entry.cpp b/tests/route/test-routing-table-pool-entry.cpp
index cf425d2..9b2be00 100644
--- a/tests/route/test-routing-table-pool-entry.cpp
+++ b/tests/route/test-routing-table-pool-entry.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2019,  The University of Memphis,
+/*
+ * Copyright (c) 2014-2023,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -35,11 +35,11 @@
 {
   NextHop hop1;
   hop1.setRouteCost(25);
-  hop1.setConnectingFaceUri("AAA");
+  hop1.setConnectingFaceUri(ndn::FaceUri("udp4://192.168.3.1:6363"));
 
   NextHop hop2;
   hop2.setRouteCost(10);
-  hop2.setConnectingFaceUri("BBB");
+  hop2.setConnectingFaceUri(ndn::FaceUri("udp4://192.168.3.2:6363"));
 
   NexthopList nhl1;
   NexthopList nhl2;
diff --git a/tests/route/test-routing-table.cpp b/tests/route/test-routing-table.cpp
index b777a04..a6ce36d 100644
--- a/tests/route/test-routing-table.cpp
+++ b/tests/route/test-routing-table.cpp
@@ -56,14 +56,18 @@
 
 const uint8_t RoutingTableData1[] = {
   // Header
-  0x90, 0x20,
+  0x90, 0x30,
   // Routing table entry
-  0x91, 0x1e,
+  0x91, 0x2e,
   // Destination
-  0x07, 0x07, 0x08, 0x05, 0x64, 0x65, 0x73, 0x74, 0x31, 0x8f, 0x13,
+  0x07, 0x07, 0x08, 0x05, 0x64, 0x65, 0x73, 0x74, 0x31,
   // Nexthop
-  0x8d, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x68, 0x6f, 0x70, 0x86, 0x08, 0x3f, 0xfa, 0x66,
-  0x66, 0x66, 0x66, 0x66, 0x66
+  0x8f, 0x23,
+  // Nexthop.Uri
+  0x8d, 0x17, 0x75, 0x64, 0x70, 0x34, 0x3a, 0x2f, 0x2f, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38,
+  0x2e, 0x33, 0x2e, 0x31, 0x3a, 0x36, 0x33, 0x36, 0x33,
+  // Nexthop.CostDouble
+  0x86, 0x08, 0x3f, 0xfa, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
 };
 
 const uint8_t RoutingTableData2[] = {
@@ -74,7 +78,7 @@
 BOOST_FIXTURE_TEST_CASE(Encode, RoutingTableFixture)
 {
   NextHop nexthops;
-  nexthops.setConnectingFaceUri("nexthop");
+  nexthops.setConnectingFaceUri(ndn::FaceUri("udp4://192.168.3.1:6363"));
   nexthops.setRouteCost(1.65);
   rt.addNextHop("dest1", nexthops);
   BOOST_TEST(rt.wireEncode() == RoutingTableData1, boost::test_tools::per_element());
@@ -94,7 +98,7 @@
   BOOST_CHECK_EQUAL(des1, "dest1");
 
   auto it2 = it1->getNexthopList().begin();
-  BOOST_CHECK_EQUAL(it2->getConnectingFaceUri(), "nexthop");
+  BOOST_CHECK_EQUAL(it2->getConnectingFaceUri(), ndn::FaceUri("udp4://192.168.3.1:6363"));
   BOOST_CHECK_EQUAL(it2->getRouteCost(), 1.65);
 
   BOOST_CHECK_EQUAL(rtStatus.m_rTable.size(), 1);
@@ -103,7 +107,7 @@
 BOOST_FIXTURE_TEST_CASE(OutputStream, RoutingTableFixture)
 {
   NextHop nexthops;
-  nexthops.setConnectingFaceUri("nexthop");
+  nexthops.setConnectingFaceUri(ndn::FaceUri("udp4://192.168.3.1:6363"));
   nexthops.setRouteCost(99);
   rt.addNextHop("dest1", nexthops);
 
@@ -113,7 +117,7 @@
   BOOST_CHECK_EQUAL(os.str(),
                     "Routing Table:\n"
                     "  Destination: /dest1\n"
-                    "    NextHop(Uri: nexthop, Cost: 99)\n");
+                    "    NextHop(Uri: udp4://192.168.3.1:6363, Cost: 99)\n");
 }
 
 BOOST_FIXTURE_TEST_CASE(UpdateFromLsdb, RoutingTableFixture)
