2013-06-04 22 views
11

Làm cách nào để bỏ qua bài kiểm tra đơn vị BOOST? Tôi muốn lập trình bỏ qua một số bài kiểm tra đơn vị của tôi tùy thuộc vào, (ví dụ) nền tảng mà tôi đang thực hiện chúng. Giải pháp hiện tại của tôi là:Làm thế nào để bỏ qua một thử nghiệm đơn vị BOOST?

#define REQUIRE_LINUX char * os_cpu = getenv("OS_CPU"); if (os_cpu != "Linux-x86_64") return; 

BOOST_AUTO_TEST_CASE(onlylinux) { 
    REQUIRE_LINUX 
    ... 
    the rest of the test code. 
} 

(lưu ý rằng môi trường xây dựng của chúng tôi đặt biến OS_CPU). Điều này có vẻ xấu xí và dễ bị lỗi, và cũng giống như bỏ qua im lặng có thể khiến người dùng bỏ qua các bài kiểm tra mà không biết về nó.

Làm cách nào để bỏ qua thử nghiệm đơn vị tăng cường dựa trên logic tùy ý?

Trả lời

2

Thay vì bỏ qua chúng, bạn có thể ngăn đăng ký chúng. Để đạt được điều đó bạn có thể sử dụng đăng ký kiểm tra thủ công boost.test:

#include <boost/test/included/unit_test.hpp> 
using namespace boost::unit_test; 

//____________________________________________________________________________// 

void only_linux_test() 
{ 
    ... 
} 

//____________________________________________________________________________// 

test_suite* 
init_unit_test_suite(int argc, char* argv[]) 
{ 
    if(/* is linux */) 
     framework::master_test_suite(). 
      add(BOOST_TEST_CASE(&only_linux_test)); 

    return 0; 
} 

Xem http://www.boost.org/doc/libs/1_53_0/libs/test/doc/html/utf/user-guide/test-organization/manual-nullary-test-case.html để biết thêm thông tin

Một khả năng khác sẽ được sử dụng #ifdef ... #endif với BOOST_AUTO_TEST_CASE. Vì vậy, bạn cần định nghĩa được xác định nếu bạn đang biên dịch mã trên nền tảng đích.

#ifdef PLATFORM_IS_LINUX 

BOOST_AUTO_TEST_CASE(onlyLinux) 
{ 
    ... 
} 
#endif 

Định nghĩa này có thể được thiết lập bởi môi trường xây dựng của bạn.

+0

tôi không thể sử dụng ifdefs, một số các tiêu chí này phải được xác định tại thực hiện theo thời gian. Tôi có thể sẽ sử dụng một cái gì đó như gợi ý đăng ký của bạn, cảm ơn. – dbn

3

Đăng ký các trường hợp kiểm tra theo cách thủ công là tẻ nhạt, nhàm chán và dễ bị lỗi. Nếu nó chỉ là nền tảng mà bạn cần phân biệt các trường hợp thử nghiệm, thì tôi sẽ không biên dịch các trường hợp thử nghiệm không thích hợp trên các nền tảng mà chúng không quan trọng bằng cách định cấu hình hệ thống xây dựng của tôi. Ngoài ra, bạn có thể sử dụng Boost.Predef để xác định các ký hiệu tiền xử lý cần thiết cho mọi thứ bạn có thể muốn biết về hệ điều hành, trình biên dịch, v.v., cho phép bạn #ifdef thực hiện một số thử nghiệm nhất định. Cuối cùng, nếu tiêu chí này chỉ có thể được biết khi chạy và độc lập với nền tảng mà bạn đang chạy thì tôi sẽ nhóm các thử nghiệm phụ thuộc vào các tiêu chí cụ thể vào các bộ và điều chỉnh dòng lệnh được sử dụng bởi bản dựng chỉ chạy các bộ dựa trên các tiêu chí thời gian chạy.

4

Sử dụng trang trí enable_if/enable/precondition.

boost::test_tools::assertion_result is_linux(boost::unit_test::test_unit_id) 
{ 
    return isLinux; 
} 


BOOST_AUTO_TEST_SUITE(MyTestSuite) 

BOOST_AUTO_TEST_CASE(MyTestCase, 
        * boost::unit_test::precondition(is_linux)) 
{...} 

Điều kiện tiên quyết được đánh giá khi chạy, cho phép, enable_if tại thời gian biên dịch.

Xem: http://www.boost.org/doc/libs/1_61_0/libs/test/doc/html/boost_test/tests_organization/enabling.html

+0

Tuyệt vời! Đây chính xác là những gì tôi đang tìm kiếm (trở lại trong ngày). Tôi sẽ kiểm tra nó với một vài thử nghiệm của chúng tôi. – dbn

+0

@Horus, Có cách nào để sử dụng vật cố định trong điều kiện tiên quyết không? – mojo

+0

@mojo Bạn có thể xem mã của tôi https://github.com/precice/precice/blob/develop/src/testing/Testing.hpp. Tôi sử dụng một trang trí để loại bỏ các bài kiểm tra từ cây thử nghiệm, nó có thể làm việc cho đồ đạc, quá. Xin lưu ý rằng mã của tôi có khả năng sử dụng API tăng không chính thức. – Horus

1

BOOST_AUTO_TEST_CASE(a_test_name,*boost::unit_test::disabled())

{ 
    ... 
} 
+0

Tôi không tìm thấy tham số thứ hai này trong tài liệu, bạn có chắc là nó có sẵn không? – moodboom

+0

hoàn toàn có http: //www.boost.org/doc/libs/1_65_1/libs/test/doc/html/boost_test/tests_organization/enable.html – Sergei

+0

Cảm ơn bạn rất tốt - và bây giờ tôi thấy thông số thứ hai của bạn thực ra là liên kết tới tài liệu, doh. – moodboom

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