仅当在 ctest 中运行时测试可执行文件才会失败

Mar*_*ata 6 cmake googletest ctest

当我使用 cmake () 的 ctest 接口add_test(...)并运行 make 目标时make test,我的几个测试失败了。当我直接从二进制构建文件夹在命令行运行每个测试时,它们都可以工作。

我可以用什么来调试这个?

Mar*_*ata 5

要调试,可以先ctest直接运行而不是make test.

然后您可以添加-V选项ctest以获得详细输出。

cmake 开发人员的第三个巧妙技巧是让 ctest 启动 xterm shell。所以添加

add_test(run_xterm xterm)
Run Code Online (Sandbox Code Playgroud)

在最后的 CMakeLists.txt 文件中。然后运行make test它会打开一个xterm。然后看看是否可以通过从 xterm 运行测试来复制失败的测试。如果确实失败,请检查您的环境(即env > xterm.env从 xterm 运行,然后env > regular.env从正常会话再次运行它并比较输出)。


我发现我的测试被连接来查找通过二进制 cmake 输出文件夹(即您键入的文件夹)顶部make test的相对路径传递的外部文件。但是,当您通过 ctest 运行测试时,当前工作目录是该特定子目录的二进制文件夹,并且测试失败。

换句话说:

这有效

test/mytest
Run Code Online (Sandbox Code Playgroud)

但这不起作用

cd test; ./mytest
Run Code Online (Sandbox Code Playgroud)

我必须修复单元测试以使用所需配置文件的绝对路径,而不是像../../../testvector/foo.txt.