如何为本机单元测试添加其他dll搜索目录?

时间:2015-07-14 16:00:00

标签: c++ unit-testing visual-studio-2013

我正在开发一个包含许多解决方案和更多项目的大型代码库。

当我编写单元测试时,它们通常依赖于存在的多个dll,这些dll由其他解决方案构建到我当前解决方案的不同输出文件夹中。

我通常会添加构建步骤,将所需的dll复制到当前解决方案的输出文件夹中,以便在运行单元测试时找到它们。这可能会导致大量浪费的空间和重复的dll混淆,并且每个dll的主副本都应该进入安装程序。

有没有更好的方法来添加其他搜索目录?

我正在考虑使用一个TEST_MODULE_INITIALIZE来添加AddDllDirectory(),然后将dll标记为延迟加载,这样当它们加载时,将会搜索添加的dll目录。但是,我不认为这有效,因为你必须将dll标记为exe中加载的延迟。但是,exe是我无法控制的测试者。

1 个答案:

答案 0 :(得分:3)

您的考虑绝对正确。您可以通过这种方式在VS testrunner上下文中加载依赖dll,就像枪一样:

1)设置您的测试项目以将所有必需的dll部署到输出目录中(例如,在pre \ post-build步骤的帮助下)

2)在测试项目设置中设置dll的延迟加载。 (测试项目属性-Linker-Input-Delay加载的dlls =输入依赖dll列表)

3)设置目录以搜索dll。它可以是TEST_MODULE_INITIALIZE或TEST_CLASS_INITIALIZE。简单的情况是使用SetDllDirectory来实现此目的。如果您想使用AddDllDirectory - 请使用它carefully

  

如果首先使用LOAD_LIBRARY_SEARCH_USER_DIRS调用SetDefaultDllDirectories,则使用AddDllDirectory指定的目录将添加到进程DLL搜索路径中。否则,使用AddDllDirectory函数指定的目录仅用于指定LOAD_LIBRARY_SEARCH_USER_DIRS的LoadLibraryEx函数调用。