2013-05-13 17 views
7

Sto parallelizzando un'applicazione già esistente che utilizza gTest con MPI. Nei programmi MPI, la prima cosa da fare è quella di inizializzare l'ambiente con una chiamata aProgrammi MPI di test unitario con gtest

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

Al termine di un programma MPI il processo di root dovrebbe anche chiamare MPI_Finalize. Come posso scrivere test unitari per tale applicazione utilizzando Google Test?

In particolare, come accedere a argc e argv dai test prima di gTest li modifica.

In questo momento sto facendo:

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

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

e si sente male.

risposta

10

Sei sicuro di voler accedere ai valori argc e argvprima di googletest? Vengono modificati per rimuovere argomenti specifici googletest come --gtest_filter in modo che l'applicazione non li veda.

Penso che ciò che si vuole fare è semplicemente utilizzando il seguente frammento come 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

Grazie! InitGoogleTest rimuove gli argomenti che non sono rilevanti per gTest? – gnzlbg

+1

No, non è così. Solo gli argomenti più importanti. – rmhartog

2

Basta aggiungere a @ di rmhartog risposta.

Probabilmente si desidera aggiungere anche qui sotto per lasciare un solo listener per la stampa prima di RUN_ALL_TESTS(), altrimenti i messaggi di stdout si confondono.

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