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)
