10

我正在并行化一个使用 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
}

并且感觉不对。

4

2 回答 2

15

您确定要在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;
}
于 2013-05-13T18:54:32.003 回答
4

只需添加到@rmhartog 的答案。

您可能还想在下面添加,以便在 RUN_ALL_TESTS() 之前只留下一个用于打印的侦听器,否则,标准输出消息会混合在一起。

::testing::TestEventListeners& listeners =
    ::testing::UnitTest::GetInstance()->listeners();
if (world.rank() != 0) {
    delete listeners.Release(listeners.default_result_printer());
}
于 2017-09-14T23:18:32.793 回答