如何使 ctest 在临时/临时目录中运行测试可执行文件

马特

每次运行$ make test(或$ctest)时,如何让 ctest 在单独的瞬态/临时目录中运行我的每个测试

假设我有一个测试可执行文件,mytest.cpp它做了两件事:1) 它断言当前工作目录中不存在名为“foo.txt”的文件,然后 2) 创建一个名为“foo.txt”的文件。现在我希望能够make test多次运行而不会mytest.cpp失败。

我想通过要求 cmake/ctest 在它自己的临时目录中运行每个测试(在这个例子中,一个测试)来实现这一点。

我在网上搜索了解决方案,并通读了ctest文档。特别是add_test文档。我可以提供一个“WORKING_DIRECTORY”给add_test. 这将在“WORKING_DIRECTORY”中运行我的测试。但是,对该文件夹所做的任何更改make test都会在多次运行中保持不变所以我第二次运行make test测试失败了。

这是触发故障的最小的、可重复的方式。一个mytest.cpp定义测试可执行文件的源文件和一个用于构建代码的 CMakeLists.txt 文件。

# CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
project (CMakeHelloWorld)
enable_testing()

add_executable (mytest mytest.cpp)
add_test( testname mytest)

// mytest.cpp
#include <sys/stat.h>
#include <unistd.h>
#include <string>
#include <fstream>

inline bool exists (const std::string& name) {
    std::ifstream f(name.c_str());
    return f.good();
}

int main() {
    assert(exists("foo.txt") == false);
    std::ofstream outfile ("foo.txt");
    outfile.close();
}

产生故障的一系列命令

$ mkdir build
$ cd build
$ cmake ..
$ make
$ make test
$ make test

这会给

Running tests...
Test project /path/to/project
    Start 1: testname
1/1 Test #1: testname .........................***Exception: Other  0.25 sec

0% tests passed, 1 tests failed out of 1

Total Test time (real) =   0.26 sec

The following tests FAILED:
          1 - testname (OTHER_FAULT)
Errors while running CTest
make: *** [test] Error 8
斯坦利·F。

通常,测试框架提供某种预测试(设置)和后测试(清理)任务。CTest 也是如此。

将以下CTestCustom.ctest文件添加到示例的构建目录中,每次测试都会成功:

# CTestCustom.ctest
set(CTEST_CUSTOM_POST_TEST "rm foo.txt")

对于更复杂的任务,您可能想要创建自定义脚本,但这就是调用它的方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

CMake:如何指定ctest应该在其中查找可执行文件的目录?

每个 CTest 可执行文件都有几 MB - 我如何使它们更小?

列出CTest测试套件中可执行文件的位置

如何在调试器中运行CTest测试

如何在C中的其他目录中运行可执行文件?

如何在添加到PATH的目录中运行可执行文件?

在根目录中运行make命令时,如何在其他目录中运行可执行文件?

如何强制 ctest 只在某些子目录中运行单元测试?

如何在我的ctest cmake文件中添加-j选项?

CTest:如果“ precheck”测试失败,如何跳过其他测试?

如何从终端的任何目录运行 linux 可执行文件?

如何从当前目录外部运行任何可执行文件?

如何列出Linux中的所有可执行文件(目录,子目录,$ PATH)?

运行 ctest 时出错

git 完成运行 cTest

如何在不实际运行的情况下测试可执行文件?

如何将NUnit测试作为独立的可执行文件运行?

如何使可执行文件独立于项目目录

如何使用Qt确定可执行文件的目录?

如何返回给定可执行文件的目录?

在Windows cmd中,如何在当前目录中运行可执行文件(而不是在%PATH%中具有相同名称的可执行文件)而不引用完整路径?

如何使用CMake将测试可执行文件放入单独的文件夹中?

如何使可执行文件运行不同的进程?

Windows如何确定要运行的可执行文件

如何运行Nuitka编译的Python可执行文件

如何直接从Nautilus运行可执行文件?

如何获取包含CMake中的可执行文件的目录?

如何在目录中查找最新的可执行文件

如何在Windows目录中查找所有可执行文件?