Làm thế nào để bạn làm thử nghiệm đơn vị khi bạn cóUnit-thử nghiệm với sự phụ thuộc giữa các xét nghiệm
- một số đơn vị tổng kiểm tra
- xét nghiệm phức tạp hơn việc kiểm tra các trường hợp cạnh, tùy thuộc vào những người chung
Để đưa ra ví dụ, hãy tưởng tượng thử nghiệm trình đọc CSV (Tôi vừa tạo ký hiệu để minh họa),
def test_readCsv(): ...
@dependsOn(test_readCsv)
def test_readCsv_duplicateColumnName(): ...
@dependsOn(test_readCsv)
def test_readCsv_unicodeColumnName(): ...
Tôi mong đợi các bài kiểm tra phụ chỉ được chạy nếu thử nghiệm cha mẹ của họ thành công. Lý do đằng sau việc này là chạy các kiểm tra này cần có thời gian. Nhiều báo cáo thất bại mà quay trở lại một lý do duy nhất sẽ không được nhiều thông tin. Tất nhiên, tôi có thể xé tất cả các trường hợp cạnh vào bài kiểm tra chính, nhưng tôi tự hỏi liệu có cách nào có cấu trúc hơn để làm điều này không.
tôi đã tìm thấy những liên quan nhưng câu hỏi khác nhau,
- How to structure unit tests that have dependencies?
- Unit Testing - Is it bad form to have unit test calling other unit tests
UPDATE:
tôi đã tìm thấy TestNG trong đó có vĩ đại được xây dựng trong hỗ trợ cho kiểm tra phụ thuộc. Bạn có thể viết các bài kiểm tra như thế này,
@Test{dependsOnMethods = ("test_readCsv"))
public void test_readCsv_duplicateColumnName() {
...
}
Có, NHƯNG: nếu bạn có một điều không thành công và gây ra một loạt các lỗi, bạn không được đảm bảo nhận được các thông báo lỗi theo đúng thứ tự để sửa chúng (đặc biệt là nếu bạn tự động khám phá các thử nghiệm). Ví dụ, chúng tôi có một tập hợp các bài kiểm tra đơn vị kiểm tra xem liệu môi trường web có được thiết lập đúng hay không, cái nào (trong số những thứ khác) có ích cho nhân viên mới. Nếu bạn thiếu tệp X và tệp đó được liên kết tượng trưng ở 3 vị trí, trước tiên bạn muốn sửa tệp bị thiếu. Điều đó có thể không hiển nhiên đối với một newbie và do đó bạn làm giảm tính hữu ích của bộ thử nghiệm. –
Có một số trường hợp phụ thuộc * cần * giữa các bài kiểm tra. Ví dụ: Kiểm tra trình bao bọc API đăng nhập vào máy chủ bên ngoài. Phiên đăng nhập đó cần phải được chia sẻ giữa các lần kiểm tra. –