Executando testes de unidade Boost em diferentes processos
Quero fazer testes de unidade em um programa SystemC. A idéia é ter vários conjuntos de testes com vários testes em cada conjunto. Cada um dos testes exigiria a redefinição da estrutura SystemC (por exemplo, chamandosc_simcontext::reset()
), mas isso não é possível devido a algum bug que aparentemente não será corrigido em breve. Portanto, decidi criar uma solução alternativa.
Eu descobri que se eu executar cada teste em um processo diferente, tudo funcionará bem. O seguinte trecho de código fornece uma visão geral do esquema que usei para fazê-lo funcionar:
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);
}
Agora eu quero implementar um esquema de teste com o Boost Unit Test.
Eu estudei os internos da biblioteca do Boost Unit Test e descobri queunit_test_main
parece ser a função que aciona a execução de todos os testes. Mas não consegui criar uma maneira não invasiva de interagir com o Boost Unit Test para executar cada teste em um processo diferente.
Alguém conhece uma solução simples para executar cada teste em um processo diferente?