Tôi có một giao diện, ví dụ .:Sử dụng lại các triển khai thử nghiệm trong JUnit 4?
public interface Thing {
FrobResult frob(FrobInput);
}
Và một số triển khai các giao diện đó (ví dụ NormalThing
, ImmutableThing
, AsyncThing
) mà tôi đang cố gắng thử nghiệm.
Nhiều phương pháp thử nghiệm của tôi thực sự đảm bảo rằng giao diện được triển khai chính xác và do đó được nhân đôi trên mỗi lần triển khai Thing
. Trong JUnit 3, một giải pháp phổ biến cho việc này là tạo một lớp cơ sở (mở rộng TestCase
) mà sau đó được phân lớp theo từng lớp thực hiện. Nhưng đây có phải là cách tiếp cận chính xác cho JUnit 4 không?
lựa chọn thay thế có thể xảy ra trong (Tôi tin) thứ tự tăng dần ưu tiên:
cut'n'paste các phương pháp kiểm tra trùng lặp. Không phải là DRY chút nào, nhưng tôi đoán ít đáng lo ngại trong các bài kiểm tra hơn là trong mã sản xuất.
Tạo lớp trừu tượng với các phương thức
@Test
và phân lớp nó cho từng lớp thử nghiệm triển khai. (Thường thấy với các bài kiểm tra JUnit 3 - đây có phải là cách tốt để đi vào JUnit 4 không?)Đặt các phương thức thử nghiệm chung vào một lớp trợ giúp và gọi nó trên mỗi lần thực hiện. (Thành phần thay vì thừa kế.)
Cách tốt nhất để thực hiện # 3 là gì? Có thể thử nghiệm @RunWith(Parameterized.class)
được tham số hóa với từng triển khai? Hoặc là có một cách tốt hơn để thực hiện điều này?
Có, đó là cách tiếp cận chính xác để tạo lớp cơ sở, sau đó được phân lớp theo từng lớp triển khai trong JUnit4. – DaveFar
@DaveBall: Bạn có nhớ đăng câu trả lời đó không? –
# 3 sẽ đẹp hơn nhiều và tôi đồng ý với nhận xét dưới đây của bạn rằng cảm giác như thế này là có thể. –