diff --git a/tests/datasets/DepthwiseConvolutionDataset.h b/tests/datasets/DepthwiseConvolutionLayerDataset.h
similarity index 91%
rename from tests/datasets/DepthwiseConvolutionDataset.h
rename to tests/datasets/DepthwiseConvolutionLayerDataset.h
index 2c8347f..a2caba9 100644
--- a/tests/datasets/DepthwiseConvolutionDataset.h
+++ b/tests/datasets/DepthwiseConvolutionLayerDataset.h
@@ -35,7 +35,7 @@
 {
 namespace datasets
 {
-class DepthwiseConvolutionDataset
+class DepthwiseConvolutionLayerDataset
 {
 public:
     using type = std::tuple<TensorShape, TensorShape, TensorShape, TensorShape, PadStrideInfo>;
@@ -66,7 +66,7 @@
             return description.str();
         }
 
-        DepthwiseConvolutionDataset::type operator*() const
+        DepthwiseConvolutionLayerDataset::type operator*() const
         {
             return std::make_tuple(*_src_it, *_weights_it, *_biases_it, *_dst_it, *_infos_it);
         }
@@ -110,8 +110,8 @@
     }
 
 protected:
-    DepthwiseConvolutionDataset()                               = default;
-    DepthwiseConvolutionDataset(DepthwiseConvolutionDataset &&) = default;
+    DepthwiseConvolutionLayerDataset()                                    = default;
+    DepthwiseConvolutionLayerDataset(DepthwiseConvolutionLayerDataset &&) = default;
 
 private:
     std::vector<TensorShape>   _src_shapes{};
@@ -120,10 +120,10 @@
     std::vector<TensorShape>   _dst_shapes{};
     std::vector<PadStrideInfo> _infos{};
 };
-class SmallDepthwiseConvolutionDataset final : public DepthwiseConvolutionDataset
+class SmallDepthwiseConvolutionLayerDataset final : public DepthwiseConvolutionLayerDataset
 {
 public:
-    SmallDepthwiseConvolutionDataset()
+    SmallDepthwiseConvolutionLayerDataset()
     {
         add_config(TensorShape(7U, 7U, 3U), TensorShape(3U, 3U, 3U), TensorShape(3U), TensorShape(5U, 5U, 3U), PadStrideInfo(1, 1, 0, 0));
         add_config(TensorShape(23U, 27U, 5U), TensorShape(3U, 5U, 5U), TensorShape(5U), TensorShape(11U, 23U, 5U), PadStrideInfo(2, 1, 0, 0));
@@ -142,10 +142,10 @@
     }
 };
 
-class LargeDepthwiseConvolutionDataset final : public DepthwiseConvolutionDataset
+class LargeDepthwiseConvolutionLayerDataset final : public DepthwiseConvolutionLayerDataset
 {
 public:
-    LargeDepthwiseConvolutionDataset()
+    LargeDepthwiseConvolutionLayerDataset()
     {
         add_config(TensorShape(233U, 277U, 55U), TensorShape(3U, 3U, 55U), TensorShape(55U), TensorShape(116U, 275U, 55U), PadStrideInfo(2, 1, 0, 0));
         add_config(TensorShape(333U, 277U, 77U), TensorShape(3U, 3U, 77U), TensorShape(77U), TensorShape(111U, 138U, 77U), PadStrideInfo(3, 2, 1, 0));
@@ -156,10 +156,10 @@
     }
 };
 
-class SmallDepthwiseConvolutionDataset3x3 final : public DepthwiseConvolutionDataset
+class SmallDepthwiseConvolutionLayerDataset3x3 final : public DepthwiseConvolutionLayerDataset
 {
 public:
-    SmallDepthwiseConvolutionDataset3x3()
+    SmallDepthwiseConvolutionLayerDataset3x3()
     {
         add_config(TensorShape(7U, 7U, 3U, 2U), TensorShape(3U, 3U, 3U), TensorShape(3U), TensorShape(5U, 5U, 3U, 2U), PadStrideInfo(1, 1, 0, 0));
         add_config(TensorShape(33U, 27U, 11U), TensorShape(3U, 3U, 11U), TensorShape(11U), TensorShape(11U, 14U, 11U), PadStrideInfo(3, 2, 1, 1));
@@ -168,10 +168,10 @@
     }
 };
 
-class LargeDepthwiseConvolutionDataset3x3 final : public DepthwiseConvolutionDataset
+class LargeDepthwiseConvolutionLayerDataset3x3 final : public DepthwiseConvolutionLayerDataset
 {
 public:
-    LargeDepthwiseConvolutionDataset3x3()
+    LargeDepthwiseConvolutionLayerDataset3x3()
     {
         add_config(TensorShape(233U, 277U, 55U, 3U), TensorShape(3U, 3U, 55U), TensorShape(55U), TensorShape(116U, 275U, 55U, 3U), PadStrideInfo(2, 1, 0, 0));
         add_config(TensorShape(333U, 277U, 77U), TensorShape(3U, 3U, 77U), TensorShape(77U), TensorShape(111U, 138U, 77U), PadStrideInfo(3, 2, 1, 0));
diff --git a/tests/datasets/MobileNetDepthwiseConvolutionDataset.h b/tests/datasets/MobileNetDepthwiseConvolutionLayerDataset.h
similarity index 93%
rename from tests/datasets/MobileNetDepthwiseConvolutionDataset.h
rename to tests/datasets/MobileNetDepthwiseConvolutionLayerDataset.h
index 918815f..5531a08 100644
--- a/tests/datasets/MobileNetDepthwiseConvolutionDataset.h
+++ b/tests/datasets/MobileNetDepthwiseConvolutionLayerDataset.h
@@ -24,7 +24,7 @@
 #ifndef ARM_COMPUTE_TEST_MOBILENET_DEPTHWISE_CONVOLUTION_DATASET
 #define ARM_COMPUTE_TEST_MOBILENET_DEPTHWISE_CONVOLUTION_DATASET
 
-#include "tests/datasets/DepthwiseConvolutionDataset.h"
+#include "tests/datasets/DepthwiseConvolutionLayerDataset.h"
 
 #include "utils/TypePrinter.h"
 
@@ -37,10 +37,10 @@
 {
 namespace datasets
 {
-class MobileNetDepthwiseConvolutionDataset final : public DepthwiseConvolutionDataset
+class MobileNetDepthwiseConvolutionLayerDataset final : public DepthwiseConvolutionLayerDataset
 {
 public:
-    MobileNetDepthwiseConvolutionDataset()
+    MobileNetDepthwiseConvolutionLayerDataset()
     {
         add_config(TensorShape(7U, 7U, 1024U), TensorShape(3U, 3U, 1024U), TensorShape(1024U), TensorShape(3U, 3U, 1024U), PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR));
         add_config(TensorShape(14U, 14U, 512U), TensorShape(3U, 3U, 512U), TensorShape(512U), TensorShape(7U, 7U, 512U), PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR));
diff --git a/tests/datasets/ShapeDatasets.h b/tests/datasets/ShapeDatasets.h
index 173ee74..02a71aa 100644
--- a/tests/datasets/ShapeDatasets.h
+++ b/tests/datasets/ShapeDatasets.h
@@ -269,11 +269,11 @@
     }
 };
 
-/** Data set containing 2D tensor shapes for DepthConcatenate. */
-class DepthConcatenateShapes final : public ShapeDataset
+/** Data set containing 2D tensor shapes for DepthConcatenateLayer. */
+class DepthConcatenateLayerShapes final : public ShapeDataset
 {
 public:
-    DepthConcatenateShapes()
+    DepthConcatenateLayerShapes()
         : ShapeDataset("Shape",
     {
         TensorShape{ 322U, 243U },
