diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt
index 4048c58..653f372 100644
--- a/src/backends/backendsCommon/CMakeLists.txt
+++ b/src/backends/backendsCommon/CMakeLists.txt
@@ -13,6 +13,7 @@
     DynamicBackend.hpp
     DynamicBackendUtils.cpp
     DynamicBackendUtils.hpp
+    IBackendInternal.cpp
     IBackendInternal.hpp
     IBackendContext.hpp
     ITensorHandleFactory.cpp
diff --git a/src/backends/backendsCommon/IBackendInternal.cpp b/src/backends/backendsCommon/IBackendInternal.cpp
new file mode 100644
index 0000000..261613c
--- /dev/null
+++ b/src/backends/backendsCommon/IBackendInternal.cpp
@@ -0,0 +1,89 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "IBackendInternal.hpp"
+
+namespace armnn
+{
+
+ARMNN_NO_DEPRECATE_WARN_BEGIN
+IBackendInternal::ISubGraphConverterPtr IBackendInternal::CreateSubGraphConverter(
+    const std::shared_ptr<SubGraph>& subGraph) const
+{
+    return ISubGraphConverterPtr{};
+}
+
+IBackendInternal::Optimizations IBackendInternal::GetOptimizations() const
+{
+    return Optimizations{};
+}
+
+IBackendInternal::SubGraphUniquePtr IBackendInternal::OptimizeSubGraph(const SubGraph& subGraph,
+                                                                       bool& optimizationAttempted) const
+{
+    optimizationAttempted = false;
+    return nullptr;
+}
+ARMNN_NO_DEPRECATE_WARN_END
+
+IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const
+{
+    return IMemoryManagerUniquePtr();
+}
+
+IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const
+{
+    return IBackendContextPtr{};
+}
+
+// Default implementation of OptimizeSubgraphView for backward compatibility with the old API.
+// Override this method with a custom optimization implementation.
+OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph) const
+{
+    bool optimizationAttempted = false;
+
+    ARMNN_NO_DEPRECATE_WARN_BEGIN
+    SubGraphUniquePtr optSubgraph = OptimizeSubGraph(subgraph, optimizationAttempted);
+    ARMNN_NO_DEPRECATE_WARN_END
+
+    OptimizationViews result;
+    if (!optimizationAttempted)
+    {
+        result.AddUntouchedSubgraph(SubgraphView(subgraph));
+    }
+    else if (optSubgraph)
+    {
+        result.AddSubstitution({subgraph, SubgraphView(*optSubgraph.get())});
+    }
+    else
+    {
+        result.AddFailedSubgraph(SubgraphView(subgraph));
+    }
+
+    return result;
+}
+
+bool IBackendInternal::SupportsTensorAllocatorAPI() const
+{
+    return !GetHandleFactoryPreferences().empty();
+}
+
+ITensorHandleFactory::FactoryId IBackendInternal::GetBackwardCompatibleFavoriteHandleFactory()
+{
+    auto favorites = GetHandleFactoryPreferences();
+    if (favorites.empty())
+    {
+        return ITensorHandleFactory::LegacyFactoryId;
+    }
+
+    return favorites[0];
+}
+
+std::vector<ITensorHandleFactory::FactoryId> IBackendInternal::GetHandleFactoryPreferences() const
+{
+    return std::vector<ITensorHandleFactory::FactoryId>();
+}
+
+} // namespace armnn
diff --git a/src/backends/backendsCommon/IBackendInternal.hpp b/src/backends/backendsCommon/IBackendInternal.hpp
index c548683..f8f9df5 100644
--- a/src/backends/backendsCommon/IBackendInternal.hpp
+++ b/src/backends/backendsCommon/IBackendInternal.hpp
@@ -2,6 +2,7 @@
 // Copyright © 2017 Arm Ltd. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
+
 #pragma once
 
 #include <armnn/Types.hpp>
@@ -18,6 +19,7 @@
 #include "OptimizationViews.hpp"
 
 #include <vector>
+#include <memory>
 
 namespace armnn
 {
@@ -30,11 +32,11 @@
     uint32_t m_Major;
     uint32_t m_Minor;
 
-    BackendVersion()
+    constexpr BackendVersion()
         : m_Major(0)
         , m_Minor(0)
     {}
-    BackendVersion(uint32_t major, uint32_t minor)
+    constexpr BackendVersion(uint32_t major, uint32_t minor)
         : m_Major(major)
         , m_Minor(minor)
     {}
@@ -92,87 +94,32 @@
         = std::unique_ptr<SubGraph>;
 
     ARMNN_DEPRECATED_MSG("This method is no longer supported")
-    virtual ISubGraphConverterPtr CreateSubGraphConverter(const std::shared_ptr<SubGraph>& subGraph) const
-    {
-        return ISubGraphConverterPtr{};
-    }
+    virtual ISubGraphConverterPtr CreateSubGraphConverter(const std::shared_ptr<SubGraph>& subGraph) const;
 
     ARMNN_DEPRECATED_MSG("Use \"OptimizationViews OptimizeSubgraphView(const SubgraphView&)\" instead")
-    virtual Optimizations GetOptimizations() const
-    {
-        return Optimizations{};
-    }
+    virtual Optimizations GetOptimizations() const;
 
     ARMNN_DEPRECATED_MSG("Use \"OptimizationViews OptimizeSubgraphView(const SubgraphView&)\" instead")
-    virtual SubGraphUniquePtr OptimizeSubGraph(const SubGraph& subGraph, bool& optimizationAttempted) const
-    {
-        optimizationAttempted = false;
-        return nullptr;
-    }
+    virtual SubGraphUniquePtr OptimizeSubGraph(const SubGraph& subGraph, bool& optimizationAttempted) const;
     ARMNN_NO_DEPRECATE_WARN_END
 
-
-    virtual IMemoryManagerUniquePtr CreateMemoryManager() const
-    {
-        return IMemoryManagerUniquePtr();
-    }
+    virtual IMemoryManagerUniquePtr CreateMemoryManager() const;
 
     virtual IWorkloadFactoryPtr CreateWorkloadFactory(
         const IMemoryManagerSharedPtr& memoryManager = nullptr) const = 0;
 
-    virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const
-    {
-        return IBackendContextPtr{};
-    }
+    virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const;
 
     virtual ILayerSupportSharedPtr GetLayerSupport() const = 0;
 
-    // Default implementation of OptimizeSubgraphView for backward compatibility with the old API.
-    // Override this method with a custom optimization implementation.
-    virtual OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const
-    {
-        bool optimizationAttempted = false;
+    virtual OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const;
 
-        ARMNN_NO_DEPRECATE_WARN_BEGIN
-        SubGraphUniquePtr optSubgraph = OptimizeSubGraph(subgraph, optimizationAttempted);
-        ARMNN_NO_DEPRECATE_WARN_END
+    bool SupportsTensorAllocatorAPI() const;
 
-        OptimizationViews result;
-        if (!optimizationAttempted)
-        {
-            result.AddUntouchedSubgraph(SubgraphView(subgraph));
-        }
-        else
-        {
-            if (optSubgraph)
-            {
-                result.AddSubstitution({subgraph, SubgraphView(*optSubgraph.get())});
-            }
-            else
-            {
-                result.AddFailedSubgraph(SubgraphView(subgraph));
-            }
-        }
-        return result;
-    }
-
-    bool SupportsTensorAllocatorAPI() const { return GetHandleFactoryPreferences().empty() == false; }
-
-    ITensorHandleFactory::FactoryId GetBackwardCompatibleFavoriteHandleFactory()
-    {
-        auto favorites = GetHandleFactoryPreferences();
-        if (favorites.empty())
-        {
-            return ITensorHandleFactory::LegacyFactoryId;
-        }
-        return favorites[0];
-    }
+    ITensorHandleFactory::FactoryId GetBackwardCompatibleFavoriteHandleFactory();
 
     /// (Optional) Returns a vector of supported TensorHandleFactory ids in preference order.
-    virtual std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const
-    {
-        return std::vector<ITensorHandleFactory::FactoryId>();
-    }
+    virtual std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const;
 
     /// (Optional) Register TensorHandleFactories
     /// Either this method or CreateMemoryManager() and
@@ -180,7 +127,7 @@
     virtual void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) {}
 
     /// Returns the version of the Backend API
-    static BackendVersion GetApiVersion() { return { 1, 0 }; }
+    static constexpr BackendVersion GetApiVersion() { return BackendVersion(1, 0); }
 };
 
 using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
diff --git a/src/backends/backendsCommon/common.mk b/src/backends/backendsCommon/common.mk
index 8df5ab9..69bde81 100644
--- a/src/backends/backendsCommon/common.mk
+++ b/src/backends/backendsCommon/common.mk
@@ -10,6 +10,7 @@
 COMMON_SOURCES := \
     BackendRegistry.cpp \
     CpuTensorHandle.cpp \
+    IBackendInternal.cpp \
     ITensorHandleFactory.cpp \
     LayerSupportBase.cpp \
     MemCopyWorkload.cpp \
diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt
index 8c9644f..930157f 100644
--- a/src/backends/backendsCommon/test/CMakeLists.txt
+++ b/src/backends/backendsCommon/test/CMakeLists.txt
@@ -68,59 +68,76 @@
 # Dummy shared object for testing.
 # This is a simple library used to test the utility functions that will be used to handle the shared objects.
 
-list(APPEND armnnTestSharedObject_sources
+list(APPEND testSharedObject_sources
     TestSharedObject.cpp
     TestSharedObject.hpp
 )
 
-add_library_ex(armnnTestSharedObject SHARED ${armnnTestSharedObject_sources})
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/libarmnnNoSharedObject.txt "This is not a shared object")
+add_library_ex(TestSharedObject MODULE ${testSharedObject_sources})
+set_target_properties(TestSharedObject PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testSharedObject)
+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/testSharedObject/libNoSharedObject.txt "This is not a shared object")
 
 # Dummy dynamic backends for testing.
 # Both a valid and a number of invalid dummy dynamic backends (covering various use cases) share the
 # same source code. The various test cases are put together in the code using compiler directives.
 
-list(APPEND armnnTestDynamicBackend_sources
+list(APPEND testDynamicBackend_sources
     TestDynamicBackend.cpp
     TestDynamicBackend.hpp
 )
 
-add_library_ex(armnnValidTestDynamicBackend SHARED ${armnnTestDynamicBackend_sources})
-target_compile_definitions(armnnValidTestDynamicBackend PRIVATE -DVALID_TEST_DYNAMIC_BACKEND)
-target_include_directories(armnnValidTestDynamicBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnValidTestDynamicBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+add_library_ex(ValidTestDynamicBackend MODULE ${testDynamicBackend_sources})
+target_compile_definitions(ValidTestDynamicBackend PRIVATE -DVALID_TEST_DYNAMIC_BACKEND)
+target_include_directories(ValidTestDynamicBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(ValidTestDynamicBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+target_link_libraries(ValidTestDynamicBackend armnn)
+set_target_properties(ValidTestDynamicBackend PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend)
 
-add_library_ex(armnnInvalidTestDynamicBackend1 SHARED ${armnnTestDynamicBackend_sources})
-target_compile_definitions(armnnInvalidTestDynamicBackend1 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_1)
-target_include_directories(armnnInvalidTestDynamicBackend1 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnInvalidTestDynamicBackend1 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+add_library_ex(InvalidTestDynamicBackend1 MODULE ${testDynamicBackend_sources})
+target_compile_definitions(InvalidTestDynamicBackend1 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_1)
+target_include_directories(InvalidTestDynamicBackend1 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(InvalidTestDynamicBackend1 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+target_link_libraries(InvalidTestDynamicBackend1 armnn)
+set_target_properties(InvalidTestDynamicBackend1 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend)
 
-add_library_ex(armnnInvalidTestDynamicBackend2 SHARED ${armnnTestDynamicBackend_sources})
-target_compile_definitions(armnnInvalidTestDynamicBackend2 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_2)
-target_include_directories(armnnInvalidTestDynamicBackend2 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnInvalidTestDynamicBackend2 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+add_library_ex(InvalidTestDynamicBackend2 MODULE ${testDynamicBackend_sources})
+target_compile_definitions(InvalidTestDynamicBackend2 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_2)
+target_include_directories(InvalidTestDynamicBackend2 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(InvalidTestDynamicBackend2 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+target_link_libraries(InvalidTestDynamicBackend2 armnn)
+set_target_properties(InvalidTestDynamicBackend2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend)
 
-add_library_ex(armnnInvalidTestDynamicBackend3 SHARED ${armnnTestDynamicBackend_sources})
-target_compile_definitions(armnnInvalidTestDynamicBackend3 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_3)
-target_include_directories(armnnInvalidTestDynamicBackend3 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnInvalidTestDynamicBackend3 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+add_library_ex(InvalidTestDynamicBackend3 MODULE ${testDynamicBackend_sources})
+target_compile_definitions(InvalidTestDynamicBackend3 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_3)
+target_include_directories(InvalidTestDynamicBackend3 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(InvalidTestDynamicBackend3 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+target_link_libraries(InvalidTestDynamicBackend3 armnn)
+set_target_properties(InvalidTestDynamicBackend3 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend)
 
-add_library_ex(armnnInvalidTestDynamicBackend4 SHARED ${armnnTestDynamicBackend_sources})
-target_compile_definitions(armnnInvalidTestDynamicBackend4 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_4)
-target_include_directories(armnnInvalidTestDynamicBackend4 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnInvalidTestDynamicBackend4 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+add_library_ex(InvalidTestDynamicBackend4 MODULE ${testDynamicBackend_sources})
+target_compile_definitions(InvalidTestDynamicBackend4 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_4)
+target_include_directories(InvalidTestDynamicBackend4 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(InvalidTestDynamicBackend4 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+target_link_libraries(InvalidTestDynamicBackend4 armnn)
+set_target_properties(InvalidTestDynamicBackend4 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend)
 
-add_library_ex(armnnInvalidTestDynamicBackend5 SHARED ${armnnTestDynamicBackend_sources})
-target_compile_definitions(armnnInvalidTestDynamicBackend5 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_5)
-target_include_directories(armnnInvalidTestDynamicBackend5 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnInvalidTestDynamicBackend5 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+add_library_ex(InvalidTestDynamicBackend5 MODULE ${testDynamicBackend_sources})
+target_compile_definitions(InvalidTestDynamicBackend5 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_5)
+target_include_directories(InvalidTestDynamicBackend5 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(InvalidTestDynamicBackend5 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+target_link_libraries(InvalidTestDynamicBackend5 armnn)
+set_target_properties(InvalidTestDynamicBackend5 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend)
 
-add_library_ex(armnnInvalidTestDynamicBackend6 SHARED ${armnnTestDynamicBackend_sources})
-target_compile_definitions(armnnInvalidTestDynamicBackend6 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_6)
-target_include_directories(armnnInvalidTestDynamicBackend6 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnInvalidTestDynamicBackend6 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+add_library_ex(InvalidTestDynamicBackend6 MODULE ${testDynamicBackend_sources})
+target_compile_definitions(InvalidTestDynamicBackend6 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_6)
+target_include_directories(InvalidTestDynamicBackend6 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(InvalidTestDynamicBackend6 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+target_link_libraries(InvalidTestDynamicBackend6 armnn)
+set_target_properties(InvalidTestDynamicBackend6 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend)
 
-add_library_ex(armnnInvalidTestDynamicBackend7 SHARED ${armnnTestDynamicBackend_sources})
-target_compile_definitions(armnnInvalidTestDynamicBackend7 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_7)
-target_include_directories(armnnInvalidTestDynamicBackend7 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
-target_include_directories(armnnInvalidTestDynamicBackend7 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+add_library_ex(InvalidTestDynamicBackend7 MODULE ${testDynamicBackend_sources})
+target_compile_definitions(InvalidTestDynamicBackend7 PRIVATE -DINVALID_TEST_DYNAMIC_BACKEND_7)
+target_include_directories(InvalidTestDynamicBackend7 PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
+target_include_directories(InvalidTestDynamicBackend7 PRIVATE ${PROJECT_SOURCE_DIR}/src/backends)
+target_link_libraries(InvalidTestDynamicBackend7 armnn)
+set_target_properties(InvalidTestDynamicBackend7 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/testDynamicBackend)
diff --git a/src/backends/backendsCommon/test/DynamicBackendTests.hpp b/src/backends/backendsCommon/test/DynamicBackendTests.hpp
index 2bc4558..55f90d4 100644
--- a/src/backends/backendsCommon/test/DynamicBackendTests.hpp
+++ b/src/backends/backendsCommon/test/DynamicBackendTests.hpp
@@ -17,34 +17,63 @@
 #include <boost/filesystem.hpp>
 #include <boost/dll.hpp>
 
-static std::string g_TestSharedObjectSubDir                 = "src/backends/backendsCommon/test/";
-static std::string g_TestSharedObjectFileName               = "libarmnnTestSharedObject.so";
-static std::string g_TestValidTestDynamicBackendFileName    = "libarmnnValidTestDynamicBackend.so";
-static std::string g_TestInvalidTestDynamicBackend1FileName = "libarmnnInvalidTestDynamicBackend1.so";
-static std::string g_TestInvalidTestDynamicBackend2FileName = "libarmnnInvalidTestDynamicBackend2.so";
-static std::string g_TestInvalidTestDynamicBackend3FileName = "libarmnnInvalidTestDynamicBackend3.so";
-static std::string g_TestInvalidTestDynamicBackend4FileName = "libarmnnInvalidTestDynamicBackend4.so";
-static std::string g_TestInvalidTestDynamicBackend5FileName = "libarmnnInvalidTestDynamicBackend5.so";
-static std::string g_TestInvalidTestDynamicBackend6FileName = "libarmnnInvalidTestDynamicBackend6.so";
-static std::string g_TestInvalidTestDynamicBackend7FileName = "libarmnnInvalidTestDynamicBackend7.so";
+static std::string g_TestBaseDir                            = "src/backends/backendsCommon/test/";
 
-std::string GetTestFilePath(const std::string& fileName)
+static std::string g_TestSharedObjectSubDir                 = "testSharedObject/";
+static std::string g_TestDynamicBackendSubDir               = "testDynamicBackend/";
+
+static std::string g_TestSharedObjectFileName               = "libTestSharedObject.so";
+static std::string g_TestNoSharedObjectFileName             = "libNoSharedObject.txt";
+
+static std::string g_TestValidTestDynamicBackendFileName    = "libValidTestDynamicBackend.so";
+static std::string g_TestInvalidTestDynamicBackend1FileName = "libInvalidTestDynamicBackend1.so";
+static std::string g_TestInvalidTestDynamicBackend2FileName = "libInvalidTestDynamicBackend2.so";
+static std::string g_TestInvalidTestDynamicBackend3FileName = "libInvalidTestDynamicBackend3.so";
+static std::string g_TestInvalidTestDynamicBackend4FileName = "libInvalidTestDynamicBackend4.so";
+static std::string g_TestInvalidTestDynamicBackend5FileName = "libInvalidTestDynamicBackend5.so";
+static std::string g_TestInvalidTestDynamicBackend6FileName = "libInvalidTestDynamicBackend6.so";
+static std::string g_TestInvalidTestDynamicBackend7FileName = "libInvalidTestDynamicBackend7.so";
+
+std::string GetTestDirectoryBasePath()
 {
     using namespace boost::filesystem;
 
     path programLocation = boost::dll::program_location().parent_path();
-    path sharedObjectPath = programLocation.append(g_TestSharedObjectSubDir);
-    path sharedObjectFile = sharedObjectPath.append(fileName);
-    BOOST_TEST(exists(sharedObjectFile));
+    path sharedObjectPath = programLocation.append(g_TestBaseDir);
+    BOOST_CHECK(exists(sharedObjectPath));
 
-    return sharedObjectFile.string();
+    return sharedObjectPath.string();
+}
+
+std::string GetTestSubDirectory(const std::string& subdir)
+{
+    using namespace boost::filesystem;
+
+    std::string testDynamicBackendsBaseDir = GetTestDirectoryBasePath();
+    path testDynamicBackendsBasePath(testDynamicBackendsBaseDir);
+    path testDynamicBackendsSubDir = testDynamicBackendsBasePath.append(subdir);
+    // Do not check that the sub-directory exists because for testing reasons we may use non-existing paths
+
+    return testDynamicBackendsSubDir.string();
+}
+
+std::string GetTestFilePath(const std::string& directory, const std::string& fileName)
+{
+    using namespace boost::filesystem;
+
+    path directoryPath(directory);
+    path fileNamePath = directoryPath.append(fileName);
+    BOOST_CHECK(exists(fileNamePath));
+
+    return fileNamePath.string();
 }
 
 void OpenCloseHandleTestImpl()
 {
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -83,7 +112,8 @@
 {
     using namespace armnn;
 
-    std::string notSharedObjectFilePath = GetTestFilePath("libarmnnNoSharedObject.txt");
+    std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir);
+    std::string notSharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestNoSharedObjectFileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(notSharedObjectFilePath), RuntimeException);
@@ -94,7 +124,8 @@
 {
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -114,7 +145,8 @@
 {
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -134,7 +166,8 @@
 {
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -154,7 +187,8 @@
 {
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestSharedObjectFileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestSharedObjectSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestSharedObjectFileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -230,7 +264,8 @@
 
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestValidTestDynamicBackendFileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestValidTestDynamicBackendFileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -274,7 +309,8 @@
 
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend1FileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend1FileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -293,7 +329,8 @@
 
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend2FileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend2FileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -312,7 +349,8 @@
 
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend3FileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend3FileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -331,7 +369,8 @@
 
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend4FileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend4FileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -351,7 +390,8 @@
 
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend5FileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend5FileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -371,7 +411,8 @@
 
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend6FileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend6FileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
@@ -403,7 +444,8 @@
 
     using namespace armnn;
 
-    std::string sharedObjectFilePath = GetTestFilePath(g_TestInvalidTestDynamicBackend7FileName);
+    std::string testSubDirectory = GetTestSubDirectory(g_TestDynamicBackendSubDir);
+    std::string sharedObjectFilePath = GetTestFilePath(testSubDirectory, g_TestInvalidTestDynamicBackend7FileName);
 
     void* sharedObjectHandle = nullptr;
     BOOST_CHECK_NO_THROW(sharedObjectHandle = DynamicBackendUtils::OpenHandle(sharedObjectFilePath));
