gnz*_*lbg 8 c++ mpi googletest
我正在并行化一个已经存在的使用gTest和MPI的应用程序.在MPI程序中,首先要做的是通过调用来初始化环境
MPI_Init( int *argc, char ***argv )
Run Code Online (Sandbox Code Playgroud)
在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
}
Run Code Online (Sandbox Code Playgroud)
并且感觉不对.
rmh*_*tog 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;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
只需添加@rmhartog 的答案即可。
您可能还想添加以下内容,以便在 RUN_ALL_TESTS() 之前只留下一个用于打印的侦听器,否则,标准输出消息会混合在一起。
::testing::TestEventListeners& listeners =
::testing::UnitTest::GetInstance()->listeners();
if (world.rank() != 0) {
delete listeners.Release(listeners.default_result_printer());
}
Run Code Online (Sandbox Code Playgroud)