diff --git a/test/http/crow_getroutes_test.cpp b/test/http/crow_getroutes_test.cpp
index 21bbbd1..8c21f59 100644
--- a/test/http/crow_getroutes_test.cpp
+++ b/test/http/crow_getroutes_test.cpp
@@ -34,7 +34,7 @@
     App app;
 
     BMCWEB_ROUTE(app, "/")
-    ([](const crow::Request& /*req*/,
+    ([](const Request& /*req*/,
         const std::shared_ptr<AsyncResp>& /*asyncResp*/) {});
 
     // TODO: "/" doesn't get reported in |getRoutes| today. Uncomment this once
diff --git a/test/http/http_connection_test.cpp b/test/http/http_connection_test.cpp
index 69cf21a..cc3ebeb 100644
--- a/test/http/http_connection_test.cpp
+++ b/test/http/http_connection_test.cpp
@@ -79,8 +79,8 @@
         std::bind_front(&ClockFake::getDateStr, &clock));
 
     boost::asio::ssl::context context{boost::asio::ssl::context::tls};
-    std::shared_ptr<crow::Connection<TestStream, FakeHandler>> conn =
-        std::make_shared<crow::Connection<TestStream, FakeHandler>>(
+    std::shared_ptr<Connection<TestStream, FakeHandler>> conn =
+        std::make_shared<Connection<TestStream, FakeHandler>>(
             &handler, HttpType::HTTP, std::move(timer), date,
             boost::asio::ssl::stream<TestStream>(std::move(stream), context));
     conn->disableAuth();
diff --git a/test/http/http_response_test.cpp b/test/http/http_response_test.cpp
index 8277a3f..62a95a4 100644
--- a/test/http/http_response_test.cpp
+++ b/test/http/http_response_test.cpp
@@ -17,15 +17,17 @@
 #include <string>
 
 #include "gtest/gtest.h"
+namespace crow
+{
 namespace
 {
-void addHeaders(crow::Response& res)
+void addHeaders(Response& res)
 {
     res.addHeader("myheader", "myvalue");
     res.keepAlive(true);
     res.result(boost::beast::http::status::ok);
 }
-void verifyHeaders(crow::Response& res)
+void verifyHeaders(Response& res)
 {
     EXPECT_EQ(res.getHeaderValue("myheader"), "myvalue");
     EXPECT_EQ(res.keepAlive(), true);
@@ -68,13 +70,13 @@
 
 TEST(HttpResponse, Headers)
 {
-    crow::Response res;
+    Response res;
     addHeaders(res);
     verifyHeaders(res);
 }
 TEST(HttpResponse, StringBody)
 {
-    crow::Response res;
+    Response res;
     addHeaders(res);
     std::string_view bodyValue = "this is my new body";
     res.write({bodyValue.data(), bodyValue.length()});
@@ -83,7 +85,7 @@
 }
 TEST(HttpResponse, HttpBody)
 {
-    crow::Response res;
+    Response res;
     addHeaders(res);
     TemporaryFileHandle temporaryFile("sample text");
     res.openFile(temporaryFile.stringPath);
@@ -92,7 +94,7 @@
 }
 TEST(HttpResponse, HttpBodyWithFd)
 {
-    crow::Response res;
+    Response res;
     addHeaders(res);
     TemporaryFileHandle temporaryFile("sample text");
     FILE* fd = fopen(temporaryFile.stringPath.c_str(), "r+");
@@ -103,7 +105,7 @@
 
 TEST(HttpResponse, Base64HttpBodyWithFd)
 {
-    crow::Response res;
+    Response res;
     addHeaders(res);
     TemporaryFileHandle temporaryFile("sample text");
     FILE* fd = fopen(temporaryFile.stringPath.c_str(), "r");
@@ -115,7 +117,7 @@
 
 TEST(HttpResponse, BodyTransitions)
 {
-    crow::Response res;
+    Response res;
     addHeaders(res);
     TemporaryFileHandle temporaryFile("sample text");
     res.openFile(temporaryFile.stringPath);
@@ -138,7 +140,7 @@
 
 TEST(HttpResponse, StringBodyWriterLarge)
 {
-    crow::Response res;
+    Response res;
     std::string data = generateBigdata();
     res.write(std::string(data));
     EXPECT_EQ(getData(res.response), data);
@@ -146,7 +148,7 @@
 
 TEST(HttpResponse, Base64HttpBodyWriter)
 {
-    crow::Response res;
+    Response res;
     std::string data = "sample text";
     TemporaryFileHandle temporaryFile(data);
     FILE* f = fopen(temporaryFile.stringPath.c_str(), "r+");
@@ -156,7 +158,7 @@
 
 TEST(HttpResponse, Base64HttpBodyWriterLarge)
 {
-    crow::Response res;
+    Response res;
     std::string data = generateBigdata();
     TemporaryFileHandle temporaryFile(data);
 
@@ -166,12 +168,12 @@
               ec);
     EXPECT_EQ(ec.value(), 0);
     res.openFd(file.native_handle(), bmcweb::EncodingType::Base64);
-    EXPECT_EQ(getData(res.response), crow::utility::base64encode(data));
+    EXPECT_EQ(getData(res.response), utility::base64encode(data));
 }
 
 TEST(HttpResponse, HttpBodyWriterLarge)
 {
-    crow::Response res;
+    Response res;
     std::string data = generateBigdata();
     TemporaryFileHandle temporaryFile(data);
 
@@ -183,5 +185,5 @@
     res.openFd(file.native_handle());
     EXPECT_EQ(getData(res.response), data);
 }
-
 } // namespace
+} // namespace crow
diff --git a/test/http/router_test.cpp b/test/http/router_test.cpp
index 63b7c11..4371e7e 100644
--- a/test/http/router_test.cpp
+++ b/test/http/router_test.cpp
@@ -21,7 +21,7 @@
 namespace
 {
 
-using ::crow::utility::getParameterTag;
+using utility::getParameterTag;
 
 TEST(Router, AllowHeader)
 {
diff --git a/test/http/utility_test.cpp b/test/http/utility_test.cpp
index f369d8c..1a99d6d 100644
--- a/test/http/utility_test.cpp
+++ b/test/http/utility_test.cpp
@@ -22,8 +22,6 @@
 namespace
 {
 
-using ::crow::utility::getParameterTag;
-
 TEST(Utility, Base64DecodeAuthString)
 {
     std::string authString("dXNlcm40bWU6cGFzc3cwcmQ=");
