2013-05-13 18 views
7

Zrównoleglam już istniejącą aplikację, która używa gTest z MPI. W programach MPI, pierwszą rzeczą do zrobienia jest do inicjacji środowiska z wezwaniem doTesty jednostkowe Programy MPI z gtestem

MPI_Init(int *argc, char ***argv) 

Pod koniec programu MPI proces korzeń powinien również zadzwonić MPI_Finalize. Jak mogę napisać testy jednostkowe dla takiej aplikacji za pomocą testu Google?

W szczególności, jak uzyskać dostęp do argc i argv z testów przed gTest je modyfikuje.

Teraz robię:

int argc = 0; 
char** argv = NULL; 
boost::mpi::environment env(argc,argv); 

TEST(component_test, test_name) { 
    // stuff using mpi 
} 

i czuje się źle.

Odpowiedz

10

Czy na pewno chcesz uzyskać dostęp do wartości argc i argvprzed googletest? Są one modyfikowane w celu usunięcia szczególnych argumentów googletest, takich jak --gtest_filter, aby aplikacja ich nie widziała.

myślę, co chcesz zrobić, to po prostu stosując następujący fragment jako 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; 
} 
+0

Dzięki! Czy InitGoogleTest usuwa argumenty, które nie są związane z gTestem? – gnzlbg

+1

Nie, nie ma. Tylko argumenty gtest. – rmhartog

2

Wystarczy dodać do użytkownika @ rmhartog odpowiedź.

Prawdopodobnie również chcesz dodać poniżej, aby zostawić tylko jednego słuchacza do drukowania przed RUN_ALL_TESTS(), w przeciwnym razie komunikaty stdout będą się mieszały.

::testing::TestEventListeners& listeners = 
    ::testing::UnitTest::GetInstance()->listeners(); 
if (world.rank() != 0) { 
    delete listeners.Release(listeners.default_result_printer()); 
}