2010-06-23 14 views
14

Tôi đã sử dụng CppUnit trong một thời gian ngắn (và rất vui vì nó). Khi chúng ta đang sử dụng ngày càng nhiều phần của thư viện boost, tôi đã có một cái nhìn ngắn về boost.test và tôi tự hỏi bây giờ nếu tôi nên chuyển sang boost.test trong một dự án mới hay không.boost.test vs. CppUnit

Bất cứ ai ở đây có thể cho tôi biết về sự khác biệt giữa hai khung công tác và lợi ích (nếu có) sử dụng boost.test không?

+4

Có thể bạn sẽ tìm thấy câu trả lời cho http://stackoverflow.com/questions/242926/comparison-of-c-unit-test-frameworks hữu ích. –

+0

@ Alex: cảm ơn bài đăng của bạn, có một số liên kết thực sự hữu ích trong đó – chrmue

+0

Liên kết tốt, AAlex, +1. @chrmue, để làm rõ - nên so sánh mà bạn đang tìm kiếm giả sử một người dùng Boost hay không? Bạn có hỏi "nếu tôi sử dụng Boost để phát triển, thì có lợi thế nào khi sử dụng văn bản Boost không?" hoặc bạn chỉ đang tìm kiếm một sự so sánh đơn giản? – Mawg

Trả lời

17

Tự làm ơn và đi thẳng đến Google Test, làm cho CppUnit và boost::unit_test trông thật kỳ quặc và lặp đi lặp lại.

Ví dụ, nói rằng bạn có một vật cố đơn giản:

class MyFixture : public ::testing::Test 
{ 
    protected: 
    int foo; 

    virtual void SetUp() { foo = 0; } 
}; 

Để thêm một thử nghiệm để cố của bạn, hãy viết nó!

TEST_F(MyFixture, FooStartsAtZero) { 
    EXPECT_EQ(0, foo); 
} 

Đó là tất cả những gì bạn cần. Lưu ý việc thiếu các khai báo thử nghiệm rõ ràng hoặc một chương trình làm việc riêng biệt lặp lại tất cả tên của các bài kiểm tra của bạn.

Biên dịch nó như trong

$ g++ -o utest utest.cpp -lgtest -lgtest_main

và chạy thử nghiệm của bạn để có được

Running main() from gtest_main.cc 
[==========] Running 1 test from 1 test case. 
[----------] Global test environment set-up. 
[----------] 1 test from MyFixture 
[ RUN  ] MyFixture.FooStartsAtZero 
[  OK ] MyFixture.FooStartsAtZero (0 ms) 
[----------] 1 test from MyFixture (0 ms total) 

[----------] Global test environment tear-down 
[==========] 1 test from 1 test case ran. (0 ms total) 
[ PASSED ] 1 test.

(Chạy nó cho mình để xem văn bản màu xanh lá cây đẹp cho vượt qua kiểm tra!)

này chỉ là sự bắt đầu. Hãy xem Google Test primeradvanced guide để xem những gì khác là có thể.

+1

+1 Tôi đã tự hỏi mình câu hỏi tương tự và câu trả lời này đã nhắc tôi xem xét Google Test. Cảm ơn. – Mawg

+0

Cảm ơn bạn đã đăng câu trả lời này! Nó không thực sự trả lời câu hỏi của tôi, nhưng nó chỉ cho tôi một khung kiểm thử đơn vị mà tôi chưa biết và trông có vẻ thực sự hứa hẹn. Điều tôi thích nhất ở cái nhìn đầu tiên là cách các trường hợp thử nghiệm được thể hiện: dạng ngắn nhất có thể! – chrmue

+0

@chrmue Cảm ơn bạn đã cân nhắc! Bạn sẽ vui mừng với sức mạnh và tính biểu cảm của Google Test. –

41

như thế nào này clunky ít hơn Boost.Test thay thế:

class MyFixture { MyFixture() { /* setup here */} }; 

BOOST_AUTO_TEST_CASE(my_test, MyFixture) 
{ 
    BOOST_CHECK_EQUAL(0, foo); 
} 

Macros thực sự lâu hơn một chút, nhưng điều này là an toàn và được khuyến khích thực hành trong C++.

Tôi chưa thấy lý do kỹ thuật nào để thích Google Test (và tôi biết khá ít người thích Boost.Test). Phần còn lại chỉ là sở thích của bạn.

+4

Tôi sử dụng Boost.Test rất nhiều. Bạn có thể xây dựng trên "Tôi biết khá một vài để thích Boost.Test"? –

+9

Cũng tò mò là tại sao bạn thích Boost.Test. Những lợi thế trên googletest là gì? – Eloff

+3

Những ưu điểm đó là gì? – Etherealone