diff --git a/bmc/firmware-handler/firmware_handler.cpp b/bmc/firmware-handler/firmware_handler.cpp
index afcfc81..9268809 100644
--- a/bmc/firmware-handler/firmware_handler.cpp
+++ b/bmc/firmware-handler/firmware_handler.cpp
@@ -56,10 +56,10 @@
     }
 
     std::vector<std::string> blobs;
-    for (const auto& item : firmwares)
-    {
-        blobs.push_back(item.blobName);
-    }
+    blobs.reserve(firmwares.size());
+    std::for_each(
+        firmwares.begin(), firmwares.end(),
+        [&blobs](const auto& blob) { blobs.emplace_back(blob.blobName); });
 
     if (0 == std::count(blobs.begin(), blobs.end(), hashBlobId))
     {
diff --git a/bmc/firmware-handler/test/create_action_map.hpp b/bmc/firmware-handler/test/create_action_map.hpp
index 8238e2f..aa416e0 100644
--- a/bmc/firmware-handler/test/create_action_map.hpp
+++ b/bmc/firmware-handler/test/create_action_map.hpp
@@ -11,7 +11,7 @@
 
 namespace ipmi_flash
 {
-ActionMap CreateActionMap(const std::string& blobPath)
+static ActionMap CreateActionMap(const std::string& blobPath)
 {
     std::unique_ptr<ActionPack> actionPack = std::make_unique<ActionPack>();
     actionPack->preparation = CreateTriggerMock();
@@ -22,5 +22,4 @@
     map[blobPath] = std::move(actionPack);
     return map;
 }
-
 } // namespace ipmi_flash
diff --git a/bmc/firmware-handler/test/meson.build b/bmc/firmware-handler/test/meson.build
index 38a8a1c..4ea436e 100644
--- a/bmc/firmware-handler/test/meson.build
+++ b/bmc/firmware-handler/test/meson.build
@@ -29,7 +29,8 @@
       build_by_default: false,
       implicit_include_directories: false,
       include_directories: [root_inc, bmc_test_inc, firmware_inc],
-      dependencies: [firmware_dep, gtest, gmock]))
+      dependencies:
+        [firmware_dep, image_mock_dep, triggerable_mock_dep, gtest, gmock]))
 endforeach
 
 file_handler_test = executable(
diff --git a/bmc/test/image_mock.cpp b/bmc/test/image_mock.cpp
new file mode 100644
index 0000000..b1de68b
--- /dev/null
+++ b/bmc/test/image_mock.cpp
@@ -0,0 +1,9 @@
+#include "image_mock.hpp"
+
+namespace ipmi_flash
+{
+std::unique_ptr<ImageHandlerMock> CreateImageMock()
+{
+    return std::make_unique<ImageHandlerMock>();
+}
+} // namespace ipmi_flash
diff --git a/bmc/test/image_mock.hpp b/bmc/test/image_mock.hpp
index 9999f58..8d84dbe 100644
--- a/bmc/test/image_mock.hpp
+++ b/bmc/test/image_mock.hpp
@@ -23,9 +23,6 @@
     MOCK_METHOD(int, getSize, (), (override));
 };
 
-std::unique_ptr<ImageHandlerMock> CreateImageMock()
-{
-    return std::make_unique<ImageHandlerMock>();
-}
+std::unique_ptr<ImageHandlerMock> CreateImageMock();
 
 } // namespace ipmi_flash
diff --git a/bmc/test/meson.build b/bmc/test/meson.build
index c579ec8..61d4767 100644
--- a/bmc/test/meson.build
+++ b/bmc/test/meson.build
@@ -1 +1,28 @@
 bmc_test_inc = include_directories('.')
+
+image_mock_pre = declare_dependency(
+  include_directories: [root_inc, bmc_inc])
+
+image_mock_lib = static_library(
+  'image_mock',
+  'image_mock.cpp',
+  implicit_include_directories: false,
+  dependencies: image_mock_pre)
+
+image_mock_dep = declare_dependency(
+  link_with: image_mock_lib,
+  dependencies: image_mock_pre)
+
+
+triggerable_mock_pre = declare_dependency(
+  include_directories: [root_inc])
+
+triggerable_mock_lib = static_library(
+  'triggerable_mock',
+  'triggerable_mock.cpp',
+  implicit_include_directories: false,
+  dependencies: triggerable_mock_pre)
+
+triggerable_mock_dep = declare_dependency(
+  link_with: triggerable_mock_lib,
+  dependencies: triggerable_mock_pre)
diff --git a/bmc/test/triggerable_mock.cpp b/bmc/test/triggerable_mock.cpp
new file mode 100644
index 0000000..b599341
--- /dev/null
+++ b/bmc/test/triggerable_mock.cpp
@@ -0,0 +1,11 @@
+#include "triggerable_mock.hpp"
+
+#include <memory>
+
+namespace ipmi_flash
+{
+std::unique_ptr<TriggerableActionInterface> CreateTriggerMock()
+{
+    return std::make_unique<TriggerMock>();
+}
+} // namespace ipmi_flash
diff --git a/bmc/test/triggerable_mock.hpp b/bmc/test/triggerable_mock.hpp
index 0db90ee..4ae4463 100644
--- a/bmc/test/triggerable_mock.hpp
+++ b/bmc/test/triggerable_mock.hpp
@@ -22,9 +22,6 @@
     using TriggerableActionInterface::cb;
 };
 
-std::unique_ptr<TriggerableActionInterface> CreateTriggerMock()
-{
-    return std::make_unique<TriggerMock>();
-}
+std::unique_ptr<TriggerableActionInterface> CreateTriggerMock();
 
 } // namespace ipmi_flash
diff --git a/bmc/version-handler/test/version_mock.hpp b/bmc/version-handler/test/version_mock.hpp
index 4cae248..d8035a5 100644
--- a/bmc/version-handler/test/version_mock.hpp
+++ b/bmc/version-handler/test/version_mock.hpp
@@ -1,18 +1,18 @@
+#pragma once
 #include "handler_config.hpp"
 #include "image_mock.hpp"
 #include "triggerable_mock.hpp"
 #include "version_handler.hpp"
 
-#include <memory>
 #include <string>
-#include <utility>
 
 namespace ipmi_flash
 {
 
-auto createMockVersionConfig(const std::string& id,
-                             ImageHandlerMock** im = nullptr,
-                             TriggerMock** tm = nullptr)
+static HandlerConfig<VersionBlobHandler::ActionPack>
+    createMockVersionConfig(const std::string& id,
+                            ImageHandlerMock** im = nullptr,
+                            TriggerMock** tm = nullptr)
 {
     HandlerConfig<VersionBlobHandler::ActionPack> ret;
     ret.blobId = id;
@@ -34,15 +34,16 @@
 
 template <typename C, typename Im = std::map<std::string, ImageHandlerMock*>,
           typename Tm = std::map<std::string, TriggerMock*>>
-auto createMockVersionConfigs(const C& ids, Im* im = nullptr, Tm* tm = nullptr)
+static std::vector<HandlerConfig<VersionBlobHandler::ActionPack>>
+    createMockVersionConfigs(const C& ids, Im* im = nullptr, Tm* tm = nullptr)
 {
     std::vector<HandlerConfig<VersionBlobHandler::ActionPack>> ret;
-    for (const auto& id : ids)
-    {
-        ret.push_back(
+    ret.reserve(ids.size());
+    std::for_each(ids.begin(), ids.end(), [im, tm, &ret](const auto& id) {
+        ret.emplace_back(
             createMockVersionConfig(id, im == nullptr ? nullptr : &(*im)[id],
                                     tm == nullptr ? nullptr : &(*tm)[id]));
-    }
+    });
     return ret;
 }
 
diff --git a/tools/test/tools_updater_unittest.cpp b/tools/test/tools_updater_unittest.cpp
index 51a2848..cf6cf50 100644
--- a/tools/test/tools_updater_unittest.cpp
+++ b/tools/test/tools_updater_unittest.cpp
@@ -20,8 +20,6 @@
 {
 
 using ::testing::_;
-using ::testing::Eq;
-using ::testing::IsEmpty;
 using ::testing::Return;
 using ::testing::Throw;
 using ::testing::TypedEq;
