【发布时间】:2018-04-20 11:50:48
【问题描述】:
我正在尝试在 Microsoft Visual Studio 14 2015(在 AppVeyor 上)中使用 Boost.Test 构建和运行测试。我的测试用例是这样定义的,所以它应该总是通过并且永远不会抛出:
#define BOOST_TEST_MODULE target_boost_test
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(testcase)
{
BOOST_CHECK(true);
}
在 CMake 脚本中,我为测试设置了链接:
find_package(Boost REQUIRED COMPONENTS unit_test_framework)
include_directories(${Boost_INCLUDE_DIRS})
...
add_executable(${UT_TARGET} ${UT_SOURCE})
target_link_libraries(${UT_TARGET} ${LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
测试编译正常,没有任何警告,但没有运行并且失败,***Exception: Other 非常不清楚。
Test project C:/projects/msvc-boost-test/build
Start 1: target_boost_test
1/1 Test #1: target_boost_test ................***Exception: Other 0.08 sec
为了轻松重现,我在 GitHub 上设置了一个包含所有必要文件的存储库,并在 AppVeyor 上设置了一个自动构建作业来显示问题。
【问题讨论】:
-
可能是在构建时与运行时使用了不一致的 DLL 版本。你能检查一下吗?依赖查看器?在 linux 上,没有问题:i.imgur.com/WTNpaBg.png
-
@sehe 非常感谢您的调查。我在 Linux 上也没有遇到问题。不幸的是,我什至没有 Windows 机器,只想使用 AppVeyor 构建我的跨平台项目。我将尝试导出构建工件并在 Linux 上对其进行检查。
-
为什么必须在 wine 中运行它?你的意思是你没有访问测试机?这将使重现问题变得更加困难。或许可以在 供您使用的 Windows 系统上提升构建工件并手动运行测试
-
显然 CMake 配方已经在 linux 上为我做到了(我通常在 linux 上手动完成)。因此,您可以合理地期望它也可以在 MSVC 上运行,但可能涉及到不同的 CMake 模式。 (在 Visual Studio 中,只需制作库依赖项就足以将它们复制到输出目录 AFAIR)
标签: c++ unit-testing visual-c++ boost cmake