Vì vậy, thử nghiệm đơn khẳng định có vi phạm DRY không?
Không, nhưng nó thúc đẩy vi phạm.
Điều đó nói rằng, thiết kế hướng đối tượng tốt có xu hướng đi ra ngoài cửa sổ cho các bài kiểm tra đơn vị - chủ yếu là vì lý do tốt. Điều quan trọng hơn là các bài kiểm tra đơn vị phải được cách ly với nhau để bài kiểm tra có thể được thẩm vấn một cách cô lập và nếu cần, hãy cố định với sự tự tin rằng bạn không phá vỡ các bài kiểm tra khác. Về cơ bản, kiểm tra tính chính xác và khả năng đọc là quan trọng hơn kích thước hoặc khả năng bảo trì của nó.
Thành thật mà nói, tôi chưa bao giờ là người hâm mộ của một quy tắc khẳng định cho mỗi quy tắc kiểm tra vì những lý do bạn mô tả: nó dẫn đến rất nhiều mã soạn sẵn khó đọc, dễ bị nhầm lẫn và khó sửa nếu bạn tái cấu trúc (điều này thúc đẩy bạn tái cấu trúc ít hơn).
Nếu một hàm được cho là trả về một danh sách "foo" và "bar" cho một đầu vào nhất định, nhưng theo bất kỳ thứ tự nào, việc sử dụng hai xác nhận để kiểm tra xem cả hai đều nằm trong tập kết quả. Trường hợp bạn gặp rắc rối là khi một thử nghiệm duy nhất đang kiểm tra hai đầu vào hoặc hai tác dụng phụ và bạn không biết cái nào trong hai nguyên nhân gây ra lỗi.
Tôi xem nó như một biến thể của Nguyên tắc Trách nhiệm duy nhất: chỉ có một điều có thể khiến thử nghiệm thất bại, và trong một thế giới lý tưởng, sự thay đổi chỉ nên phá vỡ một thử nghiệm.
Nhưng cuối cùng, đó là một sự đánh đổi. Bạn có nhiều khả năng dành nhiều thời gian hơn để duy trì tất cả các mã pastey sao chép, hoặc bạn sẽ dành nhiều thời gian hơn để tìm kiếm nguyên nhân gốc rễ khi các bài kiểm tra có thể bị phá vỡ bởi nhiều nguồn. Miễn là bạn viết các bài kiểm tra, có lẽ nó không quá quan trọng. Mặc dù tôi khinh miệt đối với các bài kiểm tra đơn khẳng định, tôi có xu hướng sai ở phía các bài kiểm tra khác. Số dặm của bạn có thể thay đổi.