2009-10-29 38 views
16

Tôi phải viết một bộ thử nghiệm rất lớn cho một bộ quy tắc nghiệp vụ phức tạp hiện đang được ghi lại dưới nhiều dạng bảng (ví dụ, nếu tham số X Y Z là như vậy và giá trị phải nằm giữa V1 và V2). Mỗi quy tắc có một tên và ngữ nghĩa riêng của nó.Có thể tạo các trường hợp và bộ thử nghiệm JUnit theo cách lập trình không?

Mục tiêu cuối cùng của tôi là có bộ thử nghiệm, được tổ chức thành các bộ thử nghiệm phụ, với trường hợp kiểm tra cho từng quy tắc.

Một tùy chọn là thực sự mã hóa cứng tất cả các quy tắc này dưới dạng thử nghiệm. Đó là xấu xí, tốn thời gian và không linh hoạt.

Cách khác là viết một tập lệnh Python có thể đọc các tệp quy tắc và tạo các lớp Java với các bài kiểm tra đơn vị. Tôi muốn tránh điều này nếu tôi có thể. Một biến thể khác sẽ là sử dụng Jython.

Lý tưởng nhất, tuy nhiên tôi muốn có một bộ thử nghiệm có thể đọc các tệp và sau đó xác định các bộ phụ và thử nghiệm bên trong chúng. Mỗi bài kiểm tra có thể được khởi tạo với các giá trị nhất định được lấy từ các tệp bảng, chạy các điểm cố định trong hệ thống của chúng ta, và sau đó gọi một số hàm xác nhận hợp lệ dựa trên giá trị mong đợi.

Có cách nào hợp lý để gỡ bỏ cài đặt này bằng chỉ sử dụng Java không?

Cập nhật: Tôi có thể đã phần nào đơn giản hóa các loại quy tắc của chúng tôi. Một số người trong số họ thực sự là bảng (excel phong cách), những người khác là mờ hơn. Câu hỏi chung mặc dù vẫn còn là tôi có lẽ không phải là người đầu tiên có vấn đề này.

+0

Rất quan tâm để tìm hiểu về điều này; Tôi cần phải tìm hiểu thêm về các trường hợp kiểm tra. – I82Much

Trả lời

17

Trong vòng JUnit 4 bạn sẽ muốn xem Parameterized runner. Nó được tạo ra cho mục đích bạn mô tả (các bài kiểm tra định hướng dữ liệu). Tuy nhiên, nó sẽ không tổ chức chúng thành các suite.

Trong Junit 3 bạn có thể tạo TestSuites và Tests programatically. Câu trả lời là trong Junit Recipes, mà tôi có thể mở rộng nếu bạn cần nó (hãy nhớ rằng JUnit 4 có thể chạy thử nghiệm Junit 3).

8

Bạn đã xem xét sử dụng FIT cho điều đó chưa?

Bạn dường như đã có các bảng đã sẵn sàng và "quy tắc kinh doanh" có vẻ như "doanh nhân viết chúng bằng excel".

FIT là một hệ thống để kiểm tra các bài kiểm tra dựa trên các bảng có ánh xạ đầu vào - đầu ra dự kiến ​​và thư viện java nguồn mở để chạy các kiểm tra đó.

+0

Ngoài ra còn có trình điều khiển Java cho nó. –

+0

Đó là những gì tôi định nói; trường hợp của bạn nghe có vẻ giống như loại sự phù hợp với điều đó có nghĩa là để giải quyết; tôi khuyên bạn nên fitnesse (http://fitnesse.org) vì đó là thực hiện cập nhật nhất và hiện tại tôi có thể nghĩ đến. – Kevlar

+0

Cảm ơn bạn. Tôi quen thuộc với FIT nhưng không quen thuộc với việc triển khai mới; Tôi sẽ kiểm tra chúng. Tuy nhiên, tôi tự hỏi nếu có một cách lập trình để ở trong JUnit. – Uri

1

Chúng tôi đã thử FIT và quyết định đi với Concordion. Ưu điểm chính của thư viện này là:

  • các bài kiểm tra có thể được kiểm tra trong cùng với các cơ sở mã (vào một kho lưu trữ Subversion, ví dụ)
  • họ được thực hiện bởi một Á hậu JUnit chuẩn
0

Tôi đã viết một cái gì đó rất giống với JUnit. Tôi đã có một số lượng lớn các trường hợp thử nghiệm (30 trang) trong một tệp XML. Thay vì cố gắng để tạo ra các bài kiểm tra khác nhau, tôi đã làm tất cả trong một bài kiểm tra duy nhất, mà làm việc tốt.

thử nghiệm của tôi trông như thế này:

void setup() { 
    cases = read in the xml file 
} 

void test_fn_works() { 
    for case in cases { 
    assert(case.expected_result, fn(case.inputs), 
     'Case ' + case.inputs + ' should yield ' + case.expected_result); 

    } 
} 

Với Ruby, tôi đã làm chính xác những gì bạn đang kiểm tra phát saying-- khi đang bay.Làm điều này trong Java, mặc dù, là phức tạp, và tôi không nghĩ rằng nó là giá trị nó vì có một cách tiếp cận khá hợp lý.

Hy vọng điều này sẽ hữu ích.

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