diff --git a/tests/src/mocks/json_storage.hpp b/tests/src/mocks/json_storage_mock.hpp
similarity index 100%
rename from tests/src/mocks/json_storage.hpp
rename to tests/src/mocks/json_storage_mock.hpp
diff --git a/tests/src/mocks/sensor_mock.hpp b/tests/src/mocks/sensor_mock.hpp
new file mode 100644
index 0000000..9e8d7f3
--- /dev/null
+++ b/tests/src/mocks/sensor_mock.hpp
@@ -0,0 +1,28 @@
+#pragma once
+
+#include "interfaces/sensor.hpp"
+#include "utils/generate_unique_mock_id.hpp"
+
+#include <gmock/gmock.h>
+
+class SensorMock : public interfaces::Sensor
+{
+  public:
+    explicit SensorMock(Id sensorId) : mockSensorId(sensorId)
+    {
+        ON_CALL(*this, id()).WillByDefault(testing::Invoke([this] {
+            return this->mockSensorId;
+        }));
+    }
+
+    static Id makeId(std::string_view service, std::string_view path)
+    {
+        return Id("SensorMock", service, path);
+    }
+
+    MOCK_CONST_METHOD0(id, Id());
+
+    const uint64_t mockId = generateUniqueMockId();
+
+    Id mockSensorId = Id("SensorMock", "", "");
+};
diff --git a/tests/src/test_sensor_cache.cpp b/tests/src/test_sensor_cache.cpp
new file mode 100644
index 0000000..5be9a0d
--- /dev/null
+++ b/tests/src/test_sensor_cache.cpp
@@ -0,0 +1,109 @@
+#include "mocks/sensor_mock.hpp"
+#include "sensor_cache.hpp"
+
+#include <initializer_list>
+
+#include <gmock/gmock.h>
+
+using namespace testing;
+
+class TestSensorCache : public Test
+{
+  public:
+    SensorCache sut;
+};
+
+auto sensorIdEq(interfaces::Sensor::Id id)
+{
+    return AllOf(Field(&interfaces::Sensor::Id::type, Eq(id.type)),
+                 Field(&interfaces::Sensor::Id::service, Eq(id.service)),
+                 Field(&interfaces::Sensor::Id::path, Eq(id.path)));
+}
+
+struct IdParam
+{
+    IdParam() = default;
+    IdParam(std::string_view service, std::string_view path) :
+        service(service), path(path)
+    {}
+
+    std::string service;
+    std::string path;
+};
+
+class TestSensorCacheP :
+    public TestSensorCache,
+    public WithParamInterface<std::vector<IdParam>>
+{
+  public:
+    void SetUp() override
+    {
+        auto vec = GetParam();
+        ASSERT_THAT(vec, SizeIs(param.size()));
+        std::copy(vec.begin(), vec.end(), param.begin());
+    }
+
+    template <size_t index>
+    const IdParam& id() const
+    {
+        static_assert(index < std::tuple_size_v<decltype(param)>);
+        return param[index];
+    }
+
+  private:
+    std::array<IdParam, 2> param;
+};
+
+INSTANTIATE_TEST_SUITE_P(
+    UniqueIds, TestSensorCacheP,
+    Values(std::vector<IdParam>({IdParam("service1", "path1"),
+                                 IdParam("service1", "path2")}),
+           std::vector<IdParam>({IdParam("service1", "path1"),
+                                 IdParam("service2", "path1")}),
+           std::vector<IdParam>({IdParam("service1", "path1"),
+                                 IdParam("service2", "path2")})));
+
+TEST_P(TestSensorCacheP, shouldReturnDifferentSensorWhenIdsAreDifferent)
+{
+    auto sensor1 =
+        sut.makeSensor<NiceMock<SensorMock>>(id<0>().service, id<0>().path);
+    auto sensor2 =
+        sut.makeSensor<NiceMock<SensorMock>>(id<1>().service, id<1>().path);
+
+    ASSERT_THAT(sensor1.get(), Not(Eq(sensor2.get())));
+    ASSERT_THAT(sensor1->mockId, Not(Eq(sensor2->mockId)));
+}
+
+TEST_F(TestSensorCache, shouldReturnSameSensorWhenSensorWithSameIdStillExists)
+{
+    auto sensor1 =
+        sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path");
+    auto sensor2 =
+        sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path");
+
+    ASSERT_THAT(sensor1.get(), Eq(sensor2.get()));
+    ASSERT_THAT(sensor1->mockId, Eq(sensor2->mockId));
+}
+
+TEST_F(TestSensorCache, shouldReturnDifferentSensorWhenPreviousSensorExpired)
+{
+    auto mockId1 =
+        sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path")
+            ->mockId;
+    auto mockId2 =
+        sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path")
+            ->mockId;
+
+    ASSERT_THAT(mockId2, Not(Eq(mockId1)));
+}
+
+TEST_F(TestSensorCache, shouldCreateSensorWithCorrespondingId)
+{
+    auto id =
+        sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path")
+            ->id();
+
+    auto expected = SensorMock::makeId("sensor-service", "sensor-path");
+
+    ASSERT_THAT(id, sensorIdEq(expected));
+}
diff --git a/tests/src/utils/generate_unique_mock_id.cpp b/tests/src/utils/generate_unique_mock_id.cpp
new file mode 100644
index 0000000..f3e3f01
--- /dev/null
+++ b/tests/src/utils/generate_unique_mock_id.cpp
@@ -0,0 +1,7 @@
+#include "generate_unique_mock_id.hpp"
+
+uint64_t generateUniqueMockId()
+{
+    static uint64_t id = 0u;
+    return id++;
+}
diff --git a/tests/src/utils/generate_unique_mock_id.hpp b/tests/src/utils/generate_unique_mock_id.hpp
new file mode 100644
index 0000000..6e5192c
--- /dev/null
+++ b/tests/src/utils/generate_unique_mock_id.hpp
@@ -0,0 +1,5 @@
+#pragma once
+
+#include <cstdint>
+
+uint64_t generateUniqueMockId();
