2013-02-05 24 views
26

Gần đây tôi đã bắt đầu cố gắng đặt một chương trình đáng kính và lớn (> 1 triệu dòng) đang được kiểm tra. Hiện tại không có bài kiểm tra đơn vị nào. Ngoài ra, chương trình được liên kết như từng tệp riêng lẻ được liên kết với nhau - không có thư viện thành phần nào. Hơn nữa, các đối tượng là cao phụ thuộc lẫn nhau và rất khó (không thể?) Để liên kết tới bất kỳ tệp đối tượng nào mà không liên kết đến ít nhất một nửa trong số chúng.Tôi có thể liên kết nhiều thử nghiệm đơn vị BOOST vào một nhị phân thử nghiệm không?

Vâng, tôi biết, cuộc sống của tôi hút.

Tôi muốn thực hiện một số phép tái cấu trúc (hiển nhiên), nhưng tôi muốn có một số thử nghiệm tại chỗ trước khi tôi bắt đầu di chuyển mọi thứ xung quanh. Ý tưởng hiện tại của tôi là biên dịch một "chương trình thử nghiệm" duy nhất chạy tất cả các bài kiểm tra mà tôi tạo ra. Điều này sẽ đơn giản hóa đáng kể các vấn đề liên kết mà tôi có và để tôi tập trung vào các vấn đề thực sự. Vì vậy, tôi có hai câu hỏi:

  • Có thể liên kết nhiều tệp thử nghiệm đơn vị BOOST vào một thử nghiệm thực thi không?
  • Có giải pháp nào tốt hơn không?
+0

Dường như có thể có cách để thực hiện việc này. Cập nhật để làm theo. – dbn

Trả lời

31

Tôi đoán, đây chính là cách sử dụng kiểm tra tăng cường. tôi sẽ giữ một file main.cpp ngắn gồm nghĩa đen 2 dòng:

#define BOOST_TEST_MODULE "C++ Unit Tests for MyTangledLibrary" 
#include <boost/test/included/unit_test.hpp> 

Và sau đó tôi sẽ tiếp tục bổ sung mô-đun kiểm tra các tập tin * .cpp biên soạn lại với nhau thành một thực thi

#include <boost/test/unit_test.hpp> 
<< your include files >> 

BOOST_AUTO_TEST_SUITE(FancyShmancyLogic) 

BOOST_AUTO_TEST_CASE(TestingIf2x3equals6) 
{ 
    ... 
} 

BOOST_AUTO_TEST_CASE(TestingIf2x2equals4) 
{ 
    ... 
} 

BOOST_AUTO_TEST_SUITE_END() 

Có, bạn sẽ có thể biên dịch main.cpp đó và tất cả các mô-đun của bạn thành một tệp thực thi lớn.

+1

Khi tôi thử điều này, thử nghiệm biên dịch và liên kết, nhưng khi thực hiện tôi nhận được: Kiểm tra lỗi thiết lập: cây thử nghiệm trống rỗng –

+2

Bạn cũng cần bao gồm tất cả các tệp * .cpp của bạn vào main.cpp. Nếu không thì người thử nghiệm không biết về các xét nghiệm của bạn. – Ace7k3

+1

@ Ace7k3, tôi nghĩ rằng đó là thực tế xấu để bao giờ '# include' một tập tin' .cpp'. Đây có phải là ngoại lệ không? – tjwrona1992

Các vấn đề liên quan