diff --git a/redfish-core/ut/configfile_test.cpp b/redfish-core/ut/configfile_test.cpp
index 7e9c785..2c68c0b 100644
--- a/redfish-core/ut/configfile_test.cpp
+++ b/redfish-core/ut/configfile_test.cpp
@@ -10,61 +10,42 @@
 namespace ibm_mc
 {
 
-TEST(ConfigFileTest, FileNameValidChar)
+TEST(IsValidConfigFileName, FileNameValidCharReturnsTrue)
 {
     crow::Response res;
 
-    const std::string fileName = "GoodConfigFile";
-    EXPECT_TRUE(isValidConfigFileName(fileName, res));
+    EXPECT_TRUE(isValidConfigFileName("GoodConfigFile", res));
 }
-TEST(ConfigFileTest, FileNameInvalidChar)
+TEST(IsValidConfigFileName, FileNameInvalidCharReturnsFalse)
 {
     crow::Response res;
 
-    const std::string fileName = "Bad@file";
-    EXPECT_FALSE(isValidConfigFileName(fileName, res));
+    EXPECT_FALSE(isValidConfigFileName("Bad@file", res));
 }
-TEST(ConfigFileTest, FileNameInvalidPath1)
+TEST(IsValidConfigFileName, FileNameInvalidPathReturnsFalse)
 {
     crow::Response res;
 
-    const std::string fileName = "/../../../../../etc/badpath";
-    EXPECT_FALSE(isValidConfigFileName(fileName, res));
+    EXPECT_FALSE(isValidConfigFileName("/../../../../../etc/badpath", res));
+    EXPECT_FALSE(isValidConfigFileName("/../../etc/badpath", res));
+    EXPECT_FALSE(isValidConfigFileName("/mydir/configFile", res));
 }
-TEST(ConfigFileTest, FileNameInvalidPath2)
+
+TEST(IsValidConfigFileName, EmptyFileNameReturnsFalse)
 {
     crow::Response res;
-
-    const std::string fileName = "/../../etc/badpath";
-    EXPECT_FALSE(isValidConfigFileName(fileName, res));
+    EXPECT_FALSE(isValidConfigFileName("", res));
 }
-TEST(ConfigFileTest, FileNameInvalidPath3)
+
+TEST(IsValidConfigFileName, SlashFileNameReturnsFalse)
 {
     crow::Response res;
-
-    const std::string fileName = "/mydir/configFile";
-    EXPECT_FALSE(isValidConfigFileName(fileName, res));
+    EXPECT_FALSE(isValidConfigFileName("/", res));
 }
-TEST(ConfigFileTest, FileNameNull)
+TEST(IsValidConfigFileName, FileNameMoreThan20CharReturnsFalse)
 {
     crow::Response res;
-
-    const std::string fileName;
-    EXPECT_FALSE(isValidConfigFileName(fileName, res));
-}
-TEST(ConfigFileTest, FileNameSlash)
-{
-    crow::Response res;
-
-    const std::string fileName = "/";
-    EXPECT_FALSE(isValidConfigFileName(fileName, res));
-}
-TEST(ConfigFileTest, FileNameMorethan20Char)
-{
-    crow::Response res;
-
-    const std::string fileName = "BadfileBadfileBadfile";
-    EXPECT_FALSE(isValidConfigFileName(fileName, res));
+    EXPECT_FALSE(isValidConfigFileName("BadfileBadfileBadfile", res));
 }
 
 } // namespace ibm_mc
diff --git a/redfish-core/ut/hex_utils_test.cpp b/redfish-core/ut/hex_utils_test.cpp
index 05bcb9e..619f6eb 100644
--- a/redfish-core/ut/hex_utils_test.cpp
+++ b/redfish-core/ut/hex_utils_test.cpp
@@ -5,7 +5,7 @@
 namespace
 {
 
-TEST(ToHexString, uint64)
+TEST(IntToHexString, ReturnsCorrectHexForUint64)
 {
     EXPECT_EQ(intToHexString(0xFFFFFFFFFFFFFFFFULL, 16), "FFFFFFFFFFFFFFFF");
 
@@ -27,12 +27,12 @@
     EXPECT_EQ(intToHexString(0xBEEF, 4), "BEEF");
 }
 
-TEST(BytesToHexString, Success)
+TEST(BytesToHexString, OnSuccess)
 {
     EXPECT_EQ(bytesToHexString({0x1a, 0x2b}), "1A2B");
 }
 
-TEST(HexCharToNibble, chars)
+TEST(HexCharToNibble, ReturnsCorrectNibbleForEveryHexChar)
 {
     for (char c = 0; c < std::numeric_limits<char>::max(); ++c)
     {
diff --git a/redfish-core/ut/ip_utils_test.cpp b/redfish-core/ut/ip_utils_test.cpp
index c27ec99..c7d600b 100644
--- a/redfish-core/ut/ip_utils_test.cpp
+++ b/redfish-core/ut/ip_utils_test.cpp
@@ -9,17 +9,25 @@
 
 using ::boost::asio::ip::make_address;
 
-TEST(IpToString, v4mapped)
+TEST(IpToString, ReturnsCorrectIpStringForIpv4Addresses)
 {
     EXPECT_EQ(toString(make_address("127.0.0.1")), "127.0.0.1");
     EXPECT_EQ(toString(make_address("192.168.1.1")), "192.168.1.1");
     EXPECT_EQ(toString(make_address("::1")), "::1");
+}
+
+TEST(IpToString, ReturnsCorrectIpStringForIpv6Addresses)
+{
     EXPECT_EQ(toString(make_address("fd03:f9ab:25de:89ec::0001")),
               "fd03:f9ab:25de:89ec::1");
     EXPECT_EQ(toString(make_address("fd03:f9ab:25de:89ec::1234:abcd")),
               "fd03:f9ab:25de:89ec::1234:abcd");
     EXPECT_EQ(toString(make_address("fd03:f9ab:25de:89ec:1234:5678:90ab:cdef")),
               "fd03:f9ab:25de:89ec:1234:5678:90ab:cdef");
+}
+
+TEST(IpToString, ReturnsCorrectIpStringForIpv4MappedIpv6Addresses)
+{
     EXPECT_EQ(toString(make_address("::ffff:127.0.0.1")), "127.0.0.1");
 }
 } // namespace
diff --git a/redfish-core/ut/json_utils_test.cpp b/redfish-core/ut/json_utils_test.cpp
index cd5504c..427ed21 100644
--- a/redfish-core/ut/json_utils_test.cpp
+++ b/redfish-core/ut/json_utils_test.cpp
@@ -10,7 +10,7 @@
 namespace
 {
 
-TEST(readJson, ValidElements)
+TEST(ReadJson, ValidElementsReturnsTrueResponseOkValuesUnpackedCorrectly)
 {
     crow::Response res;
     nlohmann::json jsonRequest = {{"integer", 1},
@@ -30,23 +30,26 @@
     EXPECT_TRUE((vec == std::vector<uint64_t>{1, 2, 3}));
 }
 
-TEST(readJson, ExtraElements)
+TEST(readJson, ExtraElementsReturnsFalseReponseIsBadRequest)
 {
     crow::Response res;
-    nlohmann::json jsonRequest = {{"integer", 1}, {"string0", "hello"}};
+    nlohmann::json jsonRequest = {{"integer", 1}, {"string", "hello"}};
 
-    int64_t integer = 0;
-    std::string str;
+    std::optional<int> integer;
+    std::optional<std::string> str;
+
     EXPECT_FALSE(readJson(jsonRequest, res, "integer", integer));
     EXPECT_EQ(res.result(), boost::beast::http::status::bad_request);
     EXPECT_FALSE(res.jsonValue.empty());
+    EXPECT_EQ(integer, 1);
 
-    EXPECT_FALSE(readJson(jsonRequest, res, "string0", str));
+    EXPECT_FALSE(readJson(jsonRequest, res, "string", str));
     EXPECT_EQ(res.result(), boost::beast::http::status::bad_request);
     EXPECT_FALSE(res.jsonValue.empty());
+    EXPECT_EQ(str, "hello");
 }
 
-TEST(readJson, WrongElementType)
+TEST(ReadJson, WrongElementTypeReturnsFalseReponseIsBadRequest)
 {
     crow::Response res;
     nlohmann::json jsonRequest = {{"integer", 1}, {"string0", "hello"}};
@@ -67,7 +70,7 @@
     EXPECT_FALSE(res.jsonValue.empty());
 }
 
-TEST(readJson, MissingElement)
+TEST(ReadJson, MissingElementReturnsFalseReponseIsBadRequest)
 {
     crow::Response res;
     nlohmann::json jsonRequest = {{"integer", 1}, {"string0", "hello"}};
@@ -87,7 +90,7 @@
     EXPECT_FALSE(res.jsonValue.empty());
 }
 
-TEST(readJson, JsonVector)
+TEST(ReadJson, JsonArrayAreUnpackedCorrectly)
 {
     crow::Response res;
     nlohmann::json jsonRequest = R"(
@@ -100,9 +103,10 @@
     EXPECT_TRUE(readJson(jsonRequest, res, "TestJson", jsonVec));
     EXPECT_EQ(res.result(), boost::beast::http::status::ok);
     EXPECT_TRUE(res.jsonValue.empty());
+    EXPECT_EQ(jsonVec, R"([{"hello": "yes"}, [{"there": "no"}, "nice"]])"_json);
 }
 
-TEST(readJson, JsonSubElementValue)
+TEST(ReadJson, JsonSubElementValueAreUnpackedCorrectly)
 {
     crow::Response res;
     nlohmann::json jsonRequest = R"(
@@ -118,7 +122,7 @@
     EXPECT_TRUE(res.jsonValue.empty());
 }
 
-TEST(readJson, JsonSubElementValueDepth2)
+TEST(ReadJson, JsonDeeperSubElementValueAreUnpackedCorrectly)
 {
     crow::Response res;
     nlohmann::json jsonRequest = R"(
@@ -136,7 +140,7 @@
     EXPECT_TRUE(res.jsonValue.empty());
 }
 
-TEST(readJson, JsonSubElementValueMultiple)
+TEST(ReadJson, MultipleJsonSubElementValueAreUnpackedCorrectly)
 {
     crow::Response res;
     nlohmann::json jsonRequest = R"(
@@ -161,7 +165,7 @@
     EXPECT_TRUE(res.jsonValue.empty());
 }
 
-TEST(readJson, ExtraElement)
+TEST(ReadJson, ExtraElement)
 {
     crow::Response res;
     nlohmann::json jsonRequest = {{"integer", 1}, {"string", "hello"}};
@@ -180,7 +184,7 @@
     EXPECT_EQ(str, "hello");
 }
 
-TEST(readJson, ValidMissingElement)
+TEST(ReadJson, ValidMissingElementReturnsTrue)
 {
     crow::Response res;
     nlohmann::json jsonRequest = {{"integer", 1}};
@@ -217,7 +221,7 @@
     EXPECT_EQ(str1, std::nullopt);
 }
 
-TEST(readJson, InvalidMissingElement)
+TEST(ReadJson, InvalidMissingElementReturnsFalse)
 {
     crow::Response res;
     nlohmann::json jsonRequest = {{"integer", 1}, {"string", "hello"}};
@@ -245,7 +249,7 @@
     EXPECT_FALSE(res.jsonValue.empty());
 }
 
-TEST(readJsonPatch, ValidElements)
+TEST(ReadJsonPatch, ValidElementsReturnsTrueResponseOkValuesUnpackedCorrectly)
 {
     crow::Response res;
     std::error_code ec;
@@ -259,7 +263,7 @@
     EXPECT_TRUE(res.jsonValue.empty());
 }
 
-TEST(readJsonPatch, EmptyObjectDisallowed)
+TEST(ReadJsonPatch, EmptyObjectReturnsFalseResponseBadRequest)
 {
     crow::Response res;
     std::error_code ec;
@@ -273,7 +277,7 @@
     EXPECT_FALSE(res.jsonValue.empty());
 }
 
-TEST(readJsonPatch, OdataIgnored)
+TEST(ReadJsonPatch, OdataIgnored)
 {
     crow::Response res;
     std::error_code ec;
@@ -287,7 +291,7 @@
     EXPECT_TRUE(res.jsonValue.empty());
 }
 
-TEST(readJsonPatch, OnlyOdataGivesNoOperation)
+TEST(ReadJsonPatch, OnlyOdataGivesNoOperation)
 {
     crow::Response res;
     std::error_code ec;
@@ -301,7 +305,7 @@
     EXPECT_FALSE(res.jsonValue.empty());
 }
 
-TEST(readJsonAction, ValidElements)
+TEST(ReadJsonAction, ValidElementsReturnsTrueResponseOkValuesUnpackedCorrectly)
 {
     crow::Response res;
     std::error_code ec;
@@ -313,9 +317,10 @@
     EXPECT_TRUE(readJsonAction(req, res, "integer", integer));
     EXPECT_EQ(res.result(), boost::beast::http::status::ok);
     EXPECT_TRUE(res.jsonValue.empty());
+    EXPECT_EQ(integer, 1);
 }
 
-TEST(readJsonAction, EmptyObjectAllowed)
+TEST(ReadJsonAction, EmptyObjectReturnsTrueResponseOk)
 {
     crow::Response res;
     std::error_code ec;
diff --git a/redfish-core/ut/registries_test.cpp b/redfish-core/ut/registries_test.cpp
index c324fee..758d8b3 100644
--- a/redfish-core/ut/registries_test.cpp
+++ b/redfish-core/ut/registries_test.cpp
@@ -7,7 +7,7 @@
 namespace
 {
 
-TEST(RedfishRegistries, fillMessageArgs)
+TEST(FillMessageArgs, ArgsAreFilledCorrectly)
 {
     std::string toFill("%1");
     fillMessageArgs({{"foo"}}, toFill);
diff --git a/redfish-core/ut/stl_utils_test.cpp b/redfish-core/ut/stl_utils_test.cpp
index 02a9c15..7242200 100644
--- a/redfish-core/ut/stl_utils_test.cpp
+++ b/redfish-core/ut/stl_utils_test.cpp
@@ -8,13 +8,16 @@
 {
 namespace
 {
-TEST(STLUtilesTest, RemoveDuplicates)
+TEST(FirstDuplicate, ReturnsIteratorToFirstDuplicate)
 {
     std::vector<std::string> strVec = {"s1", "s4", "s1", "s2", "", "s3", "s3"};
-
     auto iter = firstDuplicate(strVec.begin(), strVec.end());
     EXPECT_EQ(*iter, "s3");
+}
 
+TEST(RemoveDuplicates, AllDuplicatesAreRempvedInplace)
+{
+    std::vector<std::string> strVec = {"s1", "s4", "s1", "s2", "", "s3", "s3"};
     removeDuplicate(strVec);
 
     EXPECT_EQ(strVec.size(), 5);
