Dường như trong nhiều thử nghiệm đơn vị, các giá trị tham số hóa phép thử được tự nướng vào bản thân kiểm tra, hoặc được khai báo theo cách xác định trước.Nondeterminism trong thử nghiệm đơn vị
Ví dụ, đây là một thử nghiệm lấy từ các bài kiểm tra đơn vị nUnit của (EqualsFixture.cs):
[Test]
public void Int()
{
int val = 1;
int expected = val;
int actual = val;
Assert.IsTrue(expected == actual);
Assert.AreEqual(expected, actual);
}
này có lợi thế là xác định; nếu bạn chạy thử nghiệm một lần, và nó không thành công, nó sẽ tiếp tục thất bại cho đến khi mã được cố định. Tuy nhiên, bạn chỉ kết thúc thử nghiệm một tập hợp các giá trị giới hạn.
Tôi không thể không cảm thấy như thế này là một sự lãng phí, mặc dù; các thử nghiệm tương tự chính xác có thể chạy với các thông số chính xác cùng hàng trăm nếu không phải hàng ngàn lần trong suốt vòng đời của một dự án.
Điều gì về việc ngẫu nhiên càng nhiều đầu vào cho tất cả các bài kiểm tra đơn vị càng tốt, để mỗi lần chạy có ảnh chụp tiết lộ nội dung mới?
Trong ví dụ trước, có lẽ:
[Test]
public void Int()
{
Random rnd = new Random();
int val = rnd.Next();
int expected = val;
int actual = val;
Console.WriteLine("val is {0}", val);
Assert.IsTrue(expected == actual);
Assert.AreEqual(expected, actual);
}
(Nếu mã dự kiến một chuỗi, có lẽ là một chuỗi ngẫu nhiên được biết đến là hợp lệ cho chức năng cụ thể được sử dụng mỗi lần)
Lợi ích sẽ là khi bạn chạy thử nghiệm nhiều lần, tập hợp các giá trị có thể lớn hơn bạn biết có thể xử lý chính xác.
Điều này có hữu ích không? Tà ác? Có nhược điểm đối với điều này không? Tôi hoàn toàn thiếu điểm kiểm tra đơn vị?
Cảm ơn bạn đã suy nghĩ.
Một nhược điểm lớn là nếu bạn gặp lỗi kiểm tra, nó không tái sản xuất. Rõ ràng, bạn có thể đăng nhập mà các giá trị được sử dụng khi thất bại xảy ra, nhưng điều này tạo ra trên không và phạm vi bỏ lỡ một cái gì đó. Tuy nhiên, những gì bạn mô tả vẫn hữu ích: xem http://en.wikipedia.org/wiki/Fuzz_testing để biết thông tin về một số cách mà ý tưởng này được sử dụng và đã được mở rộng. – itowlson
Cảm ơn bạn! Fuzz thử nghiệm âm thanh như chính xác những gì tôi đang nói về. Tôi sẽ xem xét điều này nhiều hơn. –
"thử nghiệm chính xác có thể chạy với chính xác cùng một tham số hàng trăm nếu không phải hàng nghìn lần trong suốt dự án" - may mắn là chúng tôi đã phát minh ra máy tính chính xác để họ có thể chạy các công việc lặp đi lặp lại cả ngày và không chán! – Ken