Модульное тестирование MPI-программ с помощью gtest
Я распараллеливаю уже существующее приложение, которое использует gTest с MPI. В программах MPI первое, что нужно сделать, это инициализировать среду с помощью вызова
MPI_Init( int *argc, char ***argv )
в конце программы MPI корневой процесс также должен вызвать MPI_Finalize. Как написать модульные тесты для такого приложения с помощью Google Test?
в частности, как получить доступ к argc и argv из тестов до gTest изменяет их.
право теперь я делаю:
int argc = 0;
char** argv = NULL;
boost::mpi::environment env(argc,argv);
TEST(component_test, test_name) {
// stuff using mpi
}
и неправильно.
2 ответов
вы уверены, что хотите получить доступ к argc
и argv
значения до googletest? Они изменяются для удаления конкретных аргументов googletest, таких как --gtest_filter
Так что приложение их не видит.
Я думаю, что вы хотите сделать, это просто, используя следующий фрагмент кода в ваш main
:
int main(int argc, char* argv[]) {
int result = 0;
::testing::InitGoogleTest(&argc, argv);
MPI_Init(&argc, &argv);
result = RUN_ALL_TESTS();
MPI_Finalize();
return result;
}
просто добавьте к ответу @rmhartog.
вы, вероятно, также хотите добавить ниже, чтобы оставить только один прослушиватель для печати перед RUN_ALL_TESTS (), иначе сообщения stdout смешиваются.
::testing::TestEventListeners& listeners =
::testing::UnitTest::GetInstance()->listeners();
if (world.rank() != 0) {
delete listeners.Release(listeners.default_result_printer());
}