2013-05-13 37 views
7

Tôi đang song song ứng dụng đã tồn tại sử dụng gTest với MPI. Trong các chương trình MPI, điều đầu tiên cần làm là khởi tạo môi trường với một cuộc gọi tớiChương trình MPI thử nghiệm đơn vị có gtest

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

Khi kết thúc chương trình MPI, quá trình gốc cũng nên gọi MPI_Finalize. Làm thế nào tôi có thể viết các bài kiểm tra đơn vị cho một ứng dụng như vậy bằng cách sử dụng Google Test?

Cụ thể, làm cách nào để truy cập argc và argv từ các thử nghiệm trước khi gTest sửa đổi chúng.

Ngay bây giờ tôi đang làm:

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

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

và cảm thấy sai.

Trả lời

10

Bạn có chắc chắn muốn truy cập vào các giá trị argcargvtrước googletest? Chúng được sửa đổi để xóa các đối số cụ thể của googletest chẳng hạn như --gtest_filter để ứng dụng không nhìn thấy chúng.

Tôi nghĩ rằng những gì bạn muốn làm là chỉ đơn giản bằng cách sử dụng đoạn mã sau như main của bạn:

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

Cảm ơn! InitGoogleTest có xóa các đối số không liên quan đến gTest không? – gnzlbg

+1

Không, không. Chỉ các đối số gtest. – rmhartog

2

Chỉ cần thêm vào câu trả lời @ rmhartog của.

Bạn cũng có thể muốn thêm bên dưới để chỉ để một trình nghe để in trước RUN_ALL_TESTS(), nếu không, các thông báo stdout sẽ trộn lẫn.

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