diff --git a/test/http/verb_test.cpp b/test/http/verb_test.cpp
index aff6ec7..698e39c 100644
--- a/test/http/verb_test.cpp
+++ b/test/http/verb_test.cpp
@@ -27,8 +27,7 @@
     {
         HttpVerb httpVerb = static_cast<HttpVerb>(verbIndex);
         std::optional<HttpVerb> verb = httpVerbFromBoost(verbMap[httpVerb]);
-        ASSERT_TRUE(verb.has_value());
-        EXPECT_EQ(*verb, httpVerb);
+        EXPECT_EQ(verb, httpVerb);
     }
 }
 
diff --git a/test/redfish-core/include/utils/query_param_test.cpp b/test/redfish-core/include/utils/query_param_test.cpp
index 7aa4ad5..c5ae21f 100644
--- a/test/redfish-core/include/utils/query_param_test.cpp
+++ b/test/redfish-core/include/utils/query_param_test.cpp
@@ -358,9 +358,12 @@
     ASSERT_TRUE(ret);
     crow::Response res;
     std::optional<Query> query = parseParameters(ret->params(), res);
-
-    ASSERT_NE(query, std::nullopt);
-    recursiveSelect(root, query->selectTrie.root);
+    ASSERT_TRUE(query);
+    if (!query)
+    {
+        return;
+    }
+    recursiveSelect(root, query.value().selectTrie.root);
     EXPECT_EQ(root, expected);
 }
 
@@ -508,10 +511,18 @@
 {
     auto ret = boost::urls::parse_relative_ref("/redfish/v1?only");
     ASSERT_TRUE(ret);
+    if (!ret)
+    {
+        return;
+    }
 
     crow::Response res;
     std::optional<Query> query = parseParameters(ret->params(), res);
-    ASSERT_TRUE(query != std::nullopt);
+    ASSERT_TRUE(query);
+    if (!query)
+    {
+        return;
+    }
     EXPECT_TRUE(query->isOnly);
 }
 
@@ -519,14 +530,22 @@
 {
     auto ret = boost::urls::parse_relative_ref("/redfish/v1?$expand=*");
     ASSERT_TRUE(ret);
+    if (!ret)
+    {
+        return;
+    }
 
     crow::Response res;
 
     std::optional<Query> query = parseParameters(ret->params(), res);
     if constexpr (bmcwebInsecureEnableQueryParams)
     {
-        ASSERT_NE(query, std::nullopt);
-        EXPECT_TRUE(query->expandType ==
+        ASSERT_TRUE(query);
+        if (!query)
+        {
+            return;
+        }
+        EXPECT_TRUE(query.value().expandType ==
                     redfish::query_param::ExpandType::Both);
     }
     else
@@ -539,12 +558,20 @@
 {
     auto ret = boost::urls::parse_relative_ref("/redfish/v1?$top=1");
     ASSERT_TRUE(ret);
+    if (!ret)
+    {
+        return;
+    }
 
     crow::Response res;
 
     std::optional<Query> query = parseParameters(ret->params(), res);
-    ASSERT_TRUE(query != std::nullopt);
-    EXPECT_EQ(query->top, 1);
+    ASSERT_TRUE(query);
+    if (!query)
+    {
+        return;
+    }
+    EXPECT_EQ(query.value().top, 1);
 }
 
 TEST(QueryParams, ParseParametersTopOutOfRangeNegative)
@@ -562,7 +589,10 @@
 {
     auto ret = boost::urls::parse_relative_ref("/redfish/v1?$top=1001");
     ASSERT_TRUE(ret);
-
+    if (!ret)
+    {
+        return;
+    }
     crow::Response res;
 
     std::optional<Query> query = parseParameters(ret->params(), res);
@@ -577,8 +607,12 @@
     crow::Response res;
 
     std::optional<Query> query = parseParameters(ret->params(), res);
-    ASSERT_TRUE(query != std::nullopt);
-    EXPECT_EQ(query->skip, 1);
+    ASSERT_TRUE(query);
+    if (!query)
+    {
+        return;
+    }
+    EXPECT_EQ(query.value().skip, 1);
 }
 TEST(QueryParams, ParseParametersSkipOutOfRange)
 {
