2013-01-14 26 views
11

Tôi có khẳng định điều này trong mã thử nghiệm của tôiChậm NUnit Khẳng định thẩm nhắn

Assert.That(() => eventData.Count == 0, 
Is.True.After(notificationPollingDelay), 
"Received unexpected event with last event data" + eventData.Last().Description()); 

đó khẳng định một số điều kiện sau một khoảng thời gian và trên thất bại tạo ra một thông điệp. nó không chạy được vì chuỗi thông báo được tạo khi xác nhận bắt đầu và không khi xác nhận kết thúc. do đó bộ sưu tập eventData vẫn còn trống (vì nó là bước đầu) và cố gắng để có được Description mục cuối cùng trong bộ sưu tập không thành công. có cách giải quyết khác hay thay thế cho điều này trong NUnit hoặc tôi có phải hoàn nguyên về việc sử dụng Thread.Sleep trong các thử nghiệm của mình không?

PS: Tôi đang sử dụng NUnit 2.5.10.

+1

Theo như tôi biết không có cú pháp xác nhận NUnit gốc. Bạn đang sử dụng thư viện xác nhận nào? –

+1

@DanielHilgarth - Đó là cú pháp xác nhận NUnit hợp lệ khi sử dụng mô hình dựa trên ràng buộc. 'Sau' là hạn chế bị trì hoãn http://www.nunit.org/index.php?p=delayedConstraint&r=2.6.2 –

+1

@manojlds: Cảm ơn bạn đã thông tin. Đối với bất kỳ ai quan tâm: [DelayedConstraint] (http://www.nunit.org/index.php?p=delayedConstraint&r=2.5.10) kết hợp với [EqualConstraint] (http://www.nunit.org/index.php ? p = equalConstraint & r = 2.5.10) sử dụng [mô-đun khẳng định dựa trên ràng buộc] (http://www.nunit.org/index.php?p=constraintModel&r=2.5.10). –

Trả lời

4

Bạn có thể sử dụng chương trình này:

var constrain = Is.True.After(notificationPollingDelay); 
var condition = constrain.Matches(() => eventData.Count == 0); 
Assert.IsTrue(condition, 
       "Received unexpected event with last event data" + 
       eventData.Last().Description()); 

Phương pháp này cũng tương tự như việc sử dụng Thread.Sleep

+0

Tôi thích cách bạn tách mã ra thành các bước hợp lý này. Tôi không có trình biên dịch tiện dụng để kiểm tra kết quả ngay bây giờ, là dòng thứ hai (thiết lập điều kiện), nơi chờ đợi xảy ra ?? Nếu vậy tôi đoán đây là giải pháp tốt nhất cho đến nay .. – mtijn

+0

Đang chờ xảy ra trong khi ở 'var condition = constrain.Matches (() => eventData.Count == 0);'. Kiểm tra với trình biên dịch khi tôi viết mã này :) –

1

Câu trả lời đơn giản nhất là "không bao gồm văn bản đó trong thông báo lỗi của bạn". Cá nhân tôi hầu như không bao giờ bao gồm một thông điệp thất bại; nếu thử nghiệm của bạn đủ nguyên tử, bạn không cần phải làm điều đó. Thông thường nếu tôi cần phải tìm ra một thất bại khó hiểu, chỉ có một trình gỡ lỗi giúp anyway.

Nếu bạn thực sự muốn làm điều đó, mã này sẽ hoạt động mà không tự quản lý chủ đề.

try 
{ 
    Assert.That(() => eventData.Count == 0, Is.True.After(notificationPollingDelay)); 
} 
catch(AssertionException) 
{ 
    throw new Exception("Received unexpected event with last event data" + eventData.Last().Description()); 
} 
+0

'không bao gồm văn bản đó trong thông điệp thất bại của bạn' - bạn cung cấp một lời khuyên và phá vỡ một trong những điều quan trọng nhất trong một thử nghiệm - hãy thử bắt. Đặc biệt là một khẳng định. -1 – manojlds

+1

LOL, ok @monojlds. – tallseth

2

Trong NUnit phiên bản 3.50 Tôi đã phải sử dụng một cú pháp khác nhau. Dưới đây là ví dụ:

var constraint = Is.True.After(delayInMilliseconds: 100000, pollingInterval: 100); 
Assert.That(() => yourCondition, constraint); 


này sẽ kiểm tra xem yourCondition là đúng chờ đợi một thời gian tối đa nhất định bằng cách sử dụng DelayedConstraint tạo theo phương pháp Is.True.After.

Trong ví dụ này, DelayedConstraint được định cấu hình để sử dụng thời gian tối đa 100 giây bỏ phiếu sau mỗi 0,1 giây.

Xem aslo tài liệu NUnit 2.5 cũ cho DelayedConstraint.

Các vấn đề liên quan