Có ổn không khi thêm các xác nhận hoãn lại như thế này [..]
Không , không phải vậy. Tại sao? Bởi vì nếu bạn vì bất kỳ lý do gì, hãy loại bỏ xác nhận thứ hai, thử nghiệm vẫn sẽ chuyển sang màu xanh và bạn sẽ nghĩ rằng nó vẫn hoạt động nhưng không phải vì bộ sưu tập sẽ không được liệt kê. Nếu bạn có hai hoặc nhiều xác nhận độc lập, họ sẽ tiếp tục thực hiện công việc của mình ngay cả khi bạn vô hiệu hóa một trong số chúng.
Hãy xem xét sự kết hợp này:
Assert.IsTrue(actualKittens.All(x => x.IsCute());
CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList());
Bây giờ ngay cả khi bạn vô hiệu hóa hoặc loại bỏ một trong những khẳng định thì người kia vẫn sẽ thực hiện công việc của mình. Ngoài ra nếu bạn quên hiện thực hóa bộ sưu tập thì có thể mất nhiều thời gian hơn để chạy nhưng nó vẫn hoạt động. Kiểm tra độc lập là mạnh mẽ hơn và đáng tin cậy.
Ngoài ra còn có thứ hai không . Tôi không chắc các khung công tác khác xử lý nó như thế nào nhưng nếu bạn đang sử dụng nền tảng MS Test thì bạn sẽ không biết thử nghiệm nào thất bại. Nếu bạn nhấp đúp vào bài kiểm tra thất bại, nó sẽ cho bạn thấy CollectionAssert
là thất bại nhưng thực tế, đó là lỗi được lồng Assert
và nó sẽ cực kỳ khó gỡ lỗi. Đây là một ví dụ:
[TestMethod]
public void TestMethod()
{
var numbers = new[] { 1, 2, 3 }.Select(x =>
{
Assert.Fail("Wrong number.");
return x;
});
// This will fail and you won't be sure why.
CollectionAssert.AreEqual(new[] { 1, 2, 3 }, numbers.ToList());
}
Điều này có nghĩa là thử nghiệm đầu tiên thực sự vô dụng vì nó không giúp tìm ra lỗi. Bạn không biết liệu nó thất bại vì một số không hợp lệ hay vì cả hai bộ sưu tập đều khác nhau.
Tại sao? Vì vậy, tôi có thể lặp lại chỉ một lần ngay cả với các câu lệnh mong muốn bộ sưu tập được cụ thể hóa
Tôi tự hỏi tại sao bạn quan tâm đến nó? Đây là những bài kiểm tra đơn vị. Bạn không phải tối ưu hóa từng bit trong số chúng và thường các bài kiểm tra không yêu cầu hàng triệu mục nên hiệu suất không phải là vấn đề đáng lo ngại.
Bạn sẽ cần phải duy trì các bài kiểm tra như vậy, tại sao bạn nên làm cho chúng phức tạp hơn sau đó cần thiết? Viết những khẳng định đơn giản mà hiệu quả.
sequence.WithSideEffect(item => Assert.IsCute(item))
để làm cho nó sạch hơn.