Как заставить ctest запускать каждый из моих тестов в отдельном временном / временном каталоге каждый раз, когда я запускаю $ make test
(или $ctest
).
Допустим, у меня есть тестовый исполняемый файл, mytest.cpp
, который делает две вещи: 1) он утверждает, что файл с именем "foo.txt" не существует в текущем рабочем каталоге, а затем 2) создает файл с именем "foo" .текст". Теперь я хочу иметь возможность запускать 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