2008-09-25 39 views
22

Tôi đang sử dụng các autotools GNU cho hệ thống xây dựng trên một dự án cụ thể. Tôi muốn bắt đầu viết các bài kiểm tra tự động cho verifcation. Tôi muốn chỉ cần gõ "make check" để nó tự động chạy chúng. Dự án của tôi là trong C++, mặc dù tôi vẫn còn tò mò về việc viết các bài kiểm tra tự động cho các ngôn ngữ khác nữa.Làm thế nào để bạn tạo các kiểm tra cho "thực hiện kiểm tra" với các autotools GNU

Tính năng này có tương thích với mọi khung kiểm thử đơn vị trên mạng không (tôi đã nghĩ đến việc sử dụng cppunit)? Làm cách nào để móc các khung kiểm thử đơn vị này vào kiểm tra? Tôi có thể đảm bảo rằng tôi không yêu cầu cài đặt phần mềm đơn vị để có thể định cấu hình và xây dựng phần còn lại của dự án không?

Trả lời

21

Để thực hiện chạy thử nghiệm khi bạn phát hành make check, bạn cần phải thêm chúng vào TESTS biến

Giả sử bạn đã xây dựng thực thi chạy các bài kiểm tra đơn vị, bạn chỉ cần thêm tên của file thực thi đến kiểm tra biến như thế này:

TESTS=my-test-executable 

nó nên sau đó được tự động chạy khi bạn make check, và nếu thực thi trả về một khác không giá trị, nó sẽ báo cáo đó như là một thử nghiệm thất bại. Nếu bạn có nhiều tập tin thực thi đơn vị kiểm tra, chỉ liệt kê tất cả chúng trong biến TESTS:

TESTS=my-first-test my-second-test my-third-test 

và tất cả họ sẽ được chạy.

+1

bạn cũng có thể muốn sử dụng biến TESTS_ENVIRONMENT nếu bạn cần tinh chỉnh môi trường mà các thử nghiệm của bạn sẽ chạy, ví dụ PATH. – tmatth

4

Dường như bạn đang hỏi 2 câu hỏi trong đoạn đầu tiên. Đầu tiên là về việc thêm các thử nghiệm vào chuỗi công cụ autotools của GNU - nhưng các bài kiểm tra đó, nếu tôi hiểu bạn một cách chính xác, cho cả hai xác nhận rằng môi trường cần thiết để xây dựng ứng dụng của bạn tồn tại (các thư viện và công cụ phụ thuộc) cũng như thích ứng với xây dựng cho môi trường (nền tảng sự khác biệt cụ thể). Thứ hai là về đơn vị kiểm tra ứng dụng C++ của bạn và nơi để gọi các bài kiểm tra đó, bạn đã đề xuất làm như vậy từ chuỗi công cụ tự động, có lẽ từ kịch bản cấu hình. Làm điều đó không phải là thông thường mặc dù - đặt một mục tiêu 'thử nghiệm' trong Makefile của bạn là một cách thông thường hơn để thực hiện bộ thử nghiệm của bạn. Các bước điển hình để xây dựng và cài đặt một ứng dụng với autotools (ít nhất là từ góc nhìn của người dùng, không phải từ nhà phát triển, phối cảnh) của bạn là chạy kịch bản cấu hình, sau đó chạy make, sau đó chạy thử tùy chọn và cuối cùng là cài đặt.

Đối với vấn đề thứ hai, không muốn cppunit là một phụ thuộc, tại sao không chỉ phân phối nó với ứng dụng C++ của bạn? Bạn có thể đặt nó ngay trong định dạng lưu trữ bạn đang sử dụng (có thể là tar.gz, tar.bz2 hoặc .zip) cùng với mã nguồn của bạn không. Tôi đã sử dụng cppunit trong quá khứ và đã hài lòng với nó, đã sử dụng JUnit và các khung công tác kiểu xUnit khác.

+0

bất kỳ thông tin chi tiết nào về bỏ phiếu xuống? Bạn có cảm thấy câu hỏi không được giải quyết trực tiếp không? –

8

Tôi đang sử dụng Check 0.9.10

configure.ac 
    Makefile.am 
    src/Makefile.am 
    src/foo.c 
    tests/check_foo.c 
    tests/Makefile.am 
  1. ./configure.ac

    PKG_CHECK_MODULES ([Check], [kiểm tra> = 0.9.10])

  2. ./tests/Makefile.am cho mã kiểm tra

    TESTS = check_foo 
    check_PROGRAMS = check_foo 
    check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h 
    check_foo_CFLAGS = @[email protected] 
    
  3. và viết mã kiểm tra, ./tests/check_foo.c

    START_TEST (test_foo) 
    { 
        ck_assert(foo() == 0); 
        ck_assert_int_eq(foo(), 0); 
    } 
    END_TEST 
    
    /// And there are some tcase_xxx codes to run this test 
    

Sử dụng kiểm tra xem bạn có thể sử dụng thời gian chờ và nâng cao tín hiệu. nó rất hữu ích.

0

Bạn có thể sử dụng Automake's TESTS để chạy các chương trình được tạo với check_PROGRAMS nhưng điều này giả định rằng bạn đang sử dụng trình điều khiển nhật ký và trình biên dịch cho đầu ra. Có lẽ vẫn còn dễ sử dụng hơn check_PROGRAMS nhưng để gọi bộ thử nghiệm bằng cách sử dụng quy tắc cục bộ trong Makefile:

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