Tôi đã thấy việc sử dụng đúng (hoặc ít nhất là tài liệu) của JUnit rất khó hiểu. Câu hỏi này phục vụ cả như một tài liệu tham khảo trong tương lai và như một câu hỏi thực sự.
Nếu tôi hiểu đúng, có hai cách tiếp cận chính để tạo và chạy thử nghiệm JUnit:
Cách tiếp cận A (kiểu JUnit 3): tạo một lớp mở rộng TestCase và bắt đầu các phương thức thử nghiệm với từ này test
. Khi chạy lớp dưới dạng Kiểm tra JUnit (trong Eclipse), tất cả các phương thức bắt đầu bằng từ test
này sẽ tự động chạy.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Cách tiếp cận B (kiểu JUnit 4): tạo một lớp 'bình thường' và thêm một @Test
chú thích cho phương thức. Lưu ý rằng bạn KHÔNG phải bắt đầu phương thức với từ này test
.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Trộn cả hai dường như không phải là một ý tưởng hay, xem ví dụ câu hỏi stackoverflow này :
Bây giờ, câu hỏi của tôi:
- Cách tiếp cận ưa thích là gì , hoặc khi nào bạn sẽ sử dụng phương pháp này thay vì phương pháp khác?
- Cách tiếp cận B cho phép kiểm tra các trường hợp ngoại lệ bằng cách mở rộng chú thích @Test như trong
@Test(expected = ArithmeticException.class)
. Nhưng làm thế nào để bạn kiểm tra các trường hợp ngoại lệ khi sử dụng phương pháp A? Khi sử dụng phương pháp A, bạn có thể nhóm một số lớp kiểm tra trong bộ kiểm tra như thế này:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
Nhưng điều này không thể được sử dụng với cách tiếp cận B (vì mỗi lớp thử nghiệm nên phân lớp TestCase). Cách thích hợp để kiểm tra nhóm cho phương pháp B là gì?
Chỉnh sửa: Tôi đã thêm các phiên bản JUnit cho cả hai phương pháp
extends TestCase
và sau đó mỗi bài kiểm tra cũng được chú thích@Test
chỉ để gây nhầm lẫn. :)