我正在并行化一个已经存在的将gTest与MPI一起使用的应用程序。在MPI程序中,首先要做的是通过调用
来初始化环境MPI_Init( int *argc, char ***argv )
在MPI程序结束时,根进程也应该调用MPI_Finalize。如何使用Google Test为这样的应用程序编写单元测试?
特别是,如何在 gTest修改它们之前从测试访问argc和argv。
现在我正在做:
int argc = 0;
char** argv = NULL;
boost::mpi::environment env(argc,argv);
TEST(component_test, test_name) {
// stuff using mpi
}
并且感觉不对。
答案 0 :(得分:13)
您确定要在 googletest之前访问argc
和argv
值吗?修改它们以删除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;
}
答案 1 :(得分:2)
只需添加@ rmhartog的答案。
您可能还想在RUN_ALL_TESTS()之前添加以下内容,只留下一个用于打印的侦听器,否则,stdout消息会混合在一起。
::testing::TestEventListeners& listeners =
::testing::UnitTest::GetInstance()->listeners();
if (world.rank() != 0) {
delete listeners.Release(listeners.default_result_printer());
}