2009-11-25 71 views
8

Tôi muốn đơn vị kiểm tra chương trình của tôi (trong C) vì tôi biết về lợi ích của việc làm như vậy là tốt, vì nó cho thấy nơi mà vấn đề là.Kiểm tra đơn vị - Làm thế nào để tiếp tục?

Tôi cũng thích thử nghiệm hộp đen, vì nó cho tôi biết nếu chương trình hoạt động (ít nhất, đối với các thử nghiệm).

Hiện tại, tôi đang sử dụng Autotest (Tự động đi kèm với Autoconf) để không thêm phụ thuộc.

Tại thời điểm này, tôi sẽ không bận tâm lắm khi sử dụng một khung công tác tốt hơn, nhưng vấn đề là tôi không muốn sử dụng một khung công tác khác cho kiểm tra hộp đen và đơn vị. Có thể chạy thử nghiệm hộp đen từ một khung kiểm tra đơn vị không? Điều tôi thực sự muốn là đầu ra đăng nhập tốt, nói chính xác điều gì đã xảy ra và ở đâu.

Tùy chọn khác của tôi là kiểm tra đơn vị với Tự động. Vấn đề là không có khung. Tôi đã viết một "trình điều khiển thử nghiệm" nhỏ chấp nhận tên của hàm để kiểm tra và các đối số để chuyển đến hàm và gọi hàm đó. Vấn đề là tôi không chắc chắn ranh giới nào để sử dụng giữa các xác nhận và xuất ra giá trị trả về của hàm (cho mục đích ghi nhật ký, vì tôi thích cách Autotest sẽ cung cấp cho tôi một khác biệt). Vì hầu hết các hàm trả về danh sách, nó sẽ nhanh hơn để chuẩn bị bằng cách sử dụng diff với đầu ra dự kiến ​​(expout using Autotest).

+0

Chương trình của bạn được viết bằng ngôn ngữ nào? – Mathias

+0

Eh, tôi không thể tin rằng tôi đã quên điều đó. Nó được viết bằng C. – alternative

+0

Nếu bạn xem xét các khung công tác khác, Wikipedia có một danh sách các khung kiểm thử đơn vị cho C: http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C Ngoài ra còn có một sản phẩm được gọi là autounit, nên tích hợp tốt với autoconf, hiện tại là phiên bản beta. http://autounit.tigris.org/ http://autounit.tigris.org/files/documents/187/171/autounit.html –

Trả lời

2

Có thể chạy kiểm tra hộp đen từ thử nghiệm đơn vị khuôn khổ không?

Có, bạn có thể gọi Autotest bằng system() từ các kiểm tra đơn vị và sau đó xác nhận về giá trị trả lại.

Nhưng tôi sẽ không khuyên bạn làm như vậy vì các bài kiểm tra đơn vị được thực hiện rất thường xuyên, chúng sẽ rất nhanh, tức là tính bằng giây, không tính bằng phút.

Kiểm tra đơn vị và thử nghiệm tích hợp (mà bạn gọi là kiểm tra hộp đen) phục vụ các mục đích khác nhau: kiểm tra đơn vị xác nhận rằng các đơn vị trong mã (điều này có nghĩa là chức năng hoặc cụm chức năng) hoạt động như mong đợi các bài kiểm tra tích hợp bao gồm chương trình từ đầu đến cuối, xác nhận nó như một tổng thể. Vì vậy, các thử nghiệm đơn vị thường được chạy sau mỗi vài thay đổi trong mã, đặc biệt là nếu bạn áp dụng TDD, trong khi kiểm tra tích hợp được thực thi khi một khả năng đã được thêm vào.

Tôi muốn có một (các) chương trình thử nghiệm đơn vị điển hình, với các xác nhận và bộ tích hợp sẽ gọi các bài kiểm tra đơn vị ngoài các kiểm tra hộp đen của bạn.

Vấn đề là tôi không chắc chắn những gì ranh giới sử dụng giữa khẳng định và xuất ra giá trị trả về của hàm (cho mục đích khai thác gỗ, kể từ Tôi thích cách Autotest sẽ cho tôi một diff).

Với xác nhận không có gì để xuất: giá trị thực và bằng nhau và không có gì xảy ra hoặc khác nhau và khuôn khổ UT in ra thông báo lỗi (dự kiến ​​là X, thực tế là Y). Đó là một cho phép máy tính thực hiện công việc kiểm tra.

Với khác biệt đầu ra ghi nhật ký, người dùng vẫn phải kiểm tra kết quả của sự khác biệt (ví dụ: có một mục bị thiếu trong danh sách hoặc thêm một mục ...).

Vì hầu hết các hàm trả về danh sách, nên chuẩn bị nhanh hơn bằng cách sử dụng khác biệt với đầu ra mong đợi (expout using Autotest).

Bạn có thể muốn viết hàm so sánh danh sách bằng xác nhận.

0

Bạn có thể muốn sử dụng CTest, mà đi kèm với CMake, một nền tảng làm cho hệ thống với nhiều backends: http://www.cmake.org/Wiki/CMake#CTest

PS: CMake là mạnh hơn rất nhiều so với autotools quá.

+0

Tôi không sử dụng CMake. – alternative

+0

Bạn có thể xem xét một chuyển đổi, cho đến khi nó không phải là quá muộn :-) – Flavius

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