我想在 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 进行交互,以便在不同的进程上运行每个测试。
有谁知道在不同进程上运行每个测试的简单解决方案?