diff --git a/test/test_activation.cpp b/test/test_activation.cpp
index b7ec3d5..27e0c66 100644
--- a/test/test_activation.cpp
+++ b/test/test_activation.cpp
@@ -332,7 +332,7 @@
     activation->requestedActivation(RequestedStatus::Active);
 
     const auto& psuQueue = getPsuQueue();
-    EXPECT_EQ(3u, psuQueue.size());
+    EXPECT_EQ(3U, psuQueue.size());
 
     // Only 3 PSUs shall be updated, and psu1 shall be skipped
     EXPECT_EQ(Status::Activating, activation->activation());
diff --git a/test/test_item_updater.cpp b/test/test_item_updater.cpp
index 58125c7..096e15f 100644
--- a/test/test_item_updater.cpp
+++ b/test/test_item_updater.cpp
@@ -180,10 +180,10 @@
 
     // Verify there is only one activation and it has two associations
     const auto& activations = GetActivations();
-    EXPECT_EQ(1u, activations.size());
+    EXPECT_EQ(1U, activations.size());
     const auto& activation = activations.find(version0)->second;
     const auto& assocs = activation->associations();
-    EXPECT_EQ(2u, assocs.size());
+    EXPECT_EQ(2U, assocs.size());
     EXPECT_EQ(psu0, std::get<2>(assocs[0]));
     EXPECT_EQ(psu1, std::get<2>(assocs[1]));
 }
@@ -234,15 +234,15 @@
 
     // Verify there are two activations and each with one association
     const auto& activations = GetActivations();
-    EXPECT_EQ(2u, activations.size());
+    EXPECT_EQ(2U, activations.size());
     const auto& activation0 = activations.find(version0)->second;
     const auto& assocs0 = activation0->associations();
-    EXPECT_EQ(1u, assocs0.size());
+    EXPECT_EQ(1U, assocs0.size());
     EXPECT_EQ(psu0, std::get<2>(assocs0[0]));
 
     const auto& activation1 = activations.find(version1)->second;
     const auto& assocs1 = activation1->associations();
-    EXPECT_EQ(1u, assocs1.size());
+    EXPECT_EQ(1U, assocs1.size());
     EXPECT_EQ(psu1, std::get<2>(assocs1[0]));
 }
 
@@ -426,17 +426,17 @@
 
     // Verify there is only one activation and it has two associations
     const auto& activations = GetActivations();
-    EXPECT_EQ(1u, activations.size());
+    EXPECT_EQ(1U, activations.size());
     const auto& activation = activations.find(version0)->second;
     auto assocs = activation->associations();
-    EXPECT_EQ(2u, assocs.size());
+    EXPECT_EQ(2U, assocs.size());
     EXPECT_EQ(psu0, std::get<2>(assocs[0]));
     EXPECT_EQ(psu1, std::get<2>(assocs[1]));
 
     // PSU0 is removed, only associations shall be updated
     onPsuInventoryChanged(psu0, propRemoved);
     assocs = activation->associations();
-    EXPECT_EQ(1u, assocs.size());
+    EXPECT_EQ(1U, assocs.size());
     EXPECT_EQ(psu1, std::get<2>(assocs[0]));
 
     // PSU1 is removed, the activation and version object shall be removed
@@ -597,7 +597,7 @@
     activations.emplace(newVersionId, std::move(dummyActivation));
     auto& activation = activations.find(version0)->second;
     auto assocs = activation->associations();
-    EXPECT_EQ(2u, assocs.size());
+    EXPECT_EQ(2U, assocs.size());
     EXPECT_EQ(psu0, std::get<2>(assocs[0]));
     EXPECT_EQ(psu1, std::get<2>(assocs[1]));
 
@@ -607,7 +607,7 @@
 
     // Now the activation should have one association
     assocs = activation->associations();
-    EXPECT_EQ(1u, assocs.size());
+    EXPECT_EQ(1U, assocs.size());
     EXPECT_EQ(psu1, std::get<2>(assocs[0]));
 
     EXPECT_CALL(mockedUtils, isAssociated(StrEq(psu1), _))
@@ -615,7 +615,7 @@
     itemUpdater->onUpdateDone(newVersionId, psu1);
 
     // Now the activation shall be erased and only the dummy one is left
-    EXPECT_EQ(1u, activations.size());
+    EXPECT_EQ(1U, activations.size());
     EXPECT_NE(activations.find(newVersionId), activations.end());
 }
 
@@ -670,17 +670,17 @@
 
     // After psu0 is done, two activations should be left
     itemUpdater->onUpdateDone(newVersionId, psu0);
-    EXPECT_EQ(2u, activations.size());
+    EXPECT_EQ(2U, activations.size());
     const auto& activation1 = activations.find(version1)->second;
     const auto& assocs1 = activation1->associations();
-    EXPECT_EQ(1u, assocs1.size());
+    EXPECT_EQ(1U, assocs1.size());
     EXPECT_EQ(psu1, std::get<2>(assocs1[0]));
 
     EXPECT_CALL(mockedUtils, isAssociated(StrEq(psu1), _))
         .WillOnce(Return(true));
     // After psu1 is done, only the dummy activation should be left
     itemUpdater->onUpdateDone(newVersionId, psu1);
-    EXPECT_EQ(1u, activations.size());
+    EXPECT_EQ(1U, activations.size());
     EXPECT_NE(activations.find(newVersionId), activations.end());
 }
 
diff --git a/test/test_utils.cpp b/test/test_utils.cpp
index a93af26..114b93a 100644
--- a/test/test_utils.cpp
+++ b/test/test_utils.cpp
@@ -58,7 +58,7 @@
         .WillOnce(Return(0)); /* end of std::vector */
 
     auto ret = utils::getPSUInventoryPath(bus);
-    EXPECT_EQ(2u, ret.size());
+    EXPECT_EQ(2U, ret.size());
     EXPECT_EQ(path0, ret[0]);
     EXPECT_EQ(path1, ret[1]);
 }
@@ -69,7 +69,7 @@
     EXPECT_EQ("", ret);
 
     ret = utils::getVersionId("some version");
-    EXPECT_EQ(8u, ret.size());
+    EXPECT_EQ(8U, ret.size());
 }
 
 TEST(Utils, IsAssociated)
diff --git a/test/test_version.cpp b/test/test_version.cpp
index 7da0352..d447e10 100644
--- a/test/test_version.cpp
+++ b/test/test_version.cpp
@@ -66,7 +66,7 @@
     writeFile(manifestFilePath, validManifest);
     auto ret = Version::getValues(manifestFilePath.string(),
                                   {"purpose", "version", "extended_version"});
-    EXPECT_EQ(3u, ret.size());
+    EXPECT_EQ(3U, ret.size());
     auto purpose = ret["purpose"];
     auto version = ret["version"];
     auto extVersion = ret["extended_version"];
@@ -85,7 +85,7 @@
 
     extVersion = "manufacturer=TestManu,model=TestModel";
     ret = Version::getExtVersionInfo(extVersion);
-    EXPECT_EQ(2u, ret.size());
+    EXPECT_EQ(2U, ret.size());
     EXPECT_EQ("TestManu", ret["manufacturer"]);
     EXPECT_EQ("TestModel", ret["model"]);
 }
@@ -96,7 +96,7 @@
     writeFile(manifestFilePath, validManifestWithCRLF);
     auto ret = Version::getValues(manifestFilePath.string(),
                                   {"purpose", "version", "extended_version"});
-    EXPECT_EQ(3u, ret.size());
+    EXPECT_EQ(3U, ret.size());
     auto purpose = ret["purpose"];
     auto version = ret["version"];
     auto extVersion = ret["extended_version"];
