diff --git a/tests/test_ItemValue.cpp b/tests/test_ItemValue.cpp
index ef1451264ea5b5cc0b62b1946aab9c4f36b236e9..53201661dfbfaca685847e03a58c690126cbf92c 100644
--- a/tests/test_ItemValue.cpp
+++ b/tests/test_ItemValue.cpp
@@ -7,9 +7,6 @@
 #include <mesh/Mesh.hpp>
 #include <utils/Messenger.hpp>
 
-// Instantiate to ensure full coverage is performed
-template class ItemValue<int, ItemType::cell>;
-
 // clazy:excludeall=non-pod-global-static
 
 TEST_CASE("ItemValue", "[mesh]")
@@ -95,6 +92,25 @@ TEST_CASE("ItemValue", "[mesh]")
     REQUIRE(CellValue<int>{connectivity}.isBuilt());
   }
 
+  SECTION("set values from array")
+  {
+    const Mesh<Connectivity<3>>& mesh_3d = MeshDataBaseForTests::get().cartesianMesh<3>();
+    const Connectivity<3>& connectivity  = mesh_3d.connectivity();
+
+    CellValue<size_t> cell_value{connectivity};
+
+    Array<size_t> values{cell_value.size()};
+    for (size_t i = 0; i < values.size(); ++i) {
+      values[i] = i;
+    }
+
+    cell_value = values;
+
+    for (CellId i_cell = 0; i_cell < mesh_3d.numberOfCells(); ++i_cell) {
+      REQUIRE(cell_value[i_cell] == i_cell);
+    }
+  }
+
   SECTION("copy")
   {
     const Mesh<Connectivity<3>>& mesh_3d = MeshDataBaseForTests::get().cartesianMesh<3>();
@@ -170,6 +186,17 @@ TEST_CASE("ItemValue", "[mesh]")
       NodeId invalid_node_id = connectivity.numberOfNodes();
       REQUIRE_THROWS_AS(node_value[invalid_node_id], AssertError);
     }
+
+    SECTION("set values from invalid array size")
+    {
+      const Mesh<Connectivity<3>>& mesh_3d = MeshDataBaseForTests::get().cartesianMesh<3>();
+      const Connectivity<3>& connectivity  = mesh_3d.connectivity();
+
+      CellValue<size_t> cell_value{connectivity};
+
+      Array<size_t> values{3 + cell_value.size()};
+      REQUIRE_THROWS_AS(cell_value = values, AssertError);
+    }
   }
 #endif   // NDEBUG
 }