Запуск модульных тестов Boost на разных процессах
Я хочу провести модульное тестирование в программе SystemC. Идея состоит в том, чтобы иметь несколько наборов тестов с несколькими тестами в каждом комплекте. Каждый из тестов потребует сброса платформы SystemC (например, путем вызоваsc_simcontext::reset()
), но это на самом деле невозможно из-за некоторой ошибки, которая, по-видимому, не будет исправлена в ближайшее время. Поэтому я решил придумать обходной путь.
Я обнаружил, что если я запускаю каждый тест в отдельном процессе, все работает нормально. Следующий фрагмент кода дает обзор схемы, которую я использовал, чтобы заставить ее работать:
void test1() {
// ...
sc_start();
}
void test2() {
// ...
sc_start();
}
typedef std::function<void()> TestFunction;
void run_test(TestFunction test_function) {
pid_t pid = fork();
switch (pid) {
case -1:
throw std::runtime_error("Error forking process");
case 0:
test_function();
exit(0);
default:
waitpid(pid, nullptr, 0);
break;
}
}
int main() {
run_test(test1);
run_test(test2);
}
Теперь я хочу реализовать такую схему тестирования с помощью Boost Unit Test.
Я изучал внутреннюю часть библиотеки Boost Unit Test и обнаружил, чтоunit_test_main
Кажется, это функция, которая запускает выполнение всех тестов. Но я не мог придумать ненавязчивый способ взаимодействия с Boost Unit Test, чтобы каждый тест выполнялся в отдельном процессе.
Кто-нибудь знает простое решение для запуска каждого теста в другом процессе?