diff --git a/tests/unit-tests/helper/lfid-routing-helper.t.cpp b/tests/unit-tests/helper/lfid-routing-helper.t.cpp
index 77eed91..1c0dfbb 100644
--- a/tests/unit-tests/helper/lfid-routing-helper.t.cpp
+++ b/tests/unit-tests/helper/lfid-routing-helper.t.cpp
@@ -24,7 +24,7 @@
 #include "model/ndn-l3-protocol.hpp"
 #include "model/ndn-net-device-transport.hpp"
 
-#include "NFD/daemon/fw/best-route-strategy2.hpp"
+#include "NFD/daemon/fw/best-route-strategy.hpp"
 
 #include "ns3/channel.h"
 #include "ns3/net-device.h"
@@ -73,7 +73,7 @@
 
   // IMPORTANT: Some strategy needs to be installed for test to work.
   ndn::StrategyChoiceHelper str;
-  str.InstallAll<nfd::fw::BestRouteStrategy2>("/");
+  str.InstallAll<nfd::fw::BestRouteStrategy>("/");
 
   int numNexthops = 0;
 
diff --git a/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp b/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
index fe2c43b..e018508 100644
--- a/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
@@ -91,14 +91,12 @@
 
   auto ndn = Names::Find<Node>("A1")->GetObject<ndn::L3Protocol>();
   for (const auto& entry : ndn->getForwarder()->getFib()) {
-    bool isFirst = true;
     for (auto& nextHop : entry.getNextHops()) {
       auto& face = nextHop.getFace();
       auto transport = dynamic_cast<NetDeviceTransport*>(face.getTransport());
       if (transport == nullptr)
         continue;
       BOOST_CHECK_EQUAL(Names::FindName(transport->GetNetDevice()->GetChannel()->GetDevice(1)->GetNode()), "C1");
-      isFirst = false;
     }
   }
 }
@@ -136,14 +134,12 @@
 
   auto ndn = Names::Find<Node>("A2")->GetObject<ndn::L3Protocol>();
   for (const auto& entry : ndn->getForwarder()->getFib()) {
-    bool isFirst = true;
     for (auto& nextHop : entry.getNextHops()) {
       auto& face = nextHop.getFace();
       auto transport = dynamic_cast<NetDeviceTransport*>(face.getTransport());
       if (transport == nullptr)
         continue;
       BOOST_CHECK_EQUAL(Names::FindName(transport->GetNetDevice()->GetChannel()->GetDevice(1)->GetNode()), "B2");
-      isFirst = false;
     }
   }
 }
diff --git a/tests/unit-tests/helper/ndn-link-control-helper.t.cpp b/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
index 0df5280..983edb5 100644
--- a/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
@@ -32,7 +32,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   createTopology({
       {"1", "2"},
@@ -77,7 +77,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Connecting nodes in 6 node topology:                        //
   //                                                             //
diff --git a/tests/unit-tests/helper/ndn-network-region-table-helper.t.cpp b/tests/unit-tests/helper/ndn-network-region-table-helper.t.cpp
index 868b9dc..4acc09d 100644
--- a/tests/unit-tests/helper/ndn-network-region-table-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-network-region-table-helper.t.cpp
@@ -26,9 +26,6 @@
 namespace ns3 {
 namespace ndn {
 
-using ::ndn::Delegation;
-using ::ndn::DelegationList;
-
 BOOST_AUTO_TEST_SUITE(HelperNdnNetworkRegionTableHelper)
 
 class BasicFixture : public ScenarioHelperWithCleanupFixture
@@ -95,14 +92,12 @@
   ::ndn::Face m_face;
 };
 
-DelegationList
+std::vector<Name>
 makeHint(const Name& delegation)
 {
-  Delegation del;
-  del.name = Name(delegation);
-  del.preference = 1;
-  DelegationList list({del});
-  return list;
+  std::vector<Name> ret;
+  ret.push_back(delegation);
+  return ret;
 }
 
 class MultiNodeWithAppFixture : public ScenarioHelperWithCleanupFixture
diff --git a/tests/unit-tests/helper/ndn-stack-helper.t.cpp b/tests/unit-tests/helper/ndn-stack-helper.t.cpp
index 2fc98b6..94f06c1 100644
--- a/tests/unit-tests/helper/ndn-stack-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-stack-helper.t.cpp
@@ -32,7 +32,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Creating nodes
   NodeContainer nodes;
diff --git a/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp b/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
index f1a8a14..9c82c45 100644
--- a/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
@@ -33,7 +33,7 @@
   {
     Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
     Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("1ms"));
-    Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("500p"));
+    Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("500p"));
 
     // Creating two 3 node topologies:                      //
     //                                                      //
@@ -150,7 +150,7 @@
   }
 
   void
-  afterReceiveInterest(const nfd::FaceEndpoint& ingress, const Interest& interest,
+  afterReceiveInterest(const Interest& interest, const nfd::FaceEndpoint& ingress,
                        const shared_ptr<nfd::pit::Entry>& pitEntry) override
   {
     // this strategy doesn't forward interests
