2012-03-21 31 views
41

Tôi muốn tạo kiểm tra NUnit để đảm bảo rằng chức năng của tôi không ném ngoại lệ. Có cách nào cụ thể để làm điều đó hay tôi chỉ cần viếtNUnit: thử nghiệm với KHÔNG mong đợi ngoại lệ

[Test] 
public void noExceptionTest() { 
    testedFunction(); 
} 

và nó sẽ thành công nếu không có ngoại lệ được ném?

+2

Đó có thực sự là tất cả những gì bạn muốn thử nghiệm không? Bạn nhận ra rằng nếu testFunction là no-op, nó sẽ vượt qua bài kiểm tra. – Martijn

+0

Phương pháp của bạn có yêu cầu cụ thể không để ném? Hoặc là nó được thực hiện theo tinh thần của * mã của tôi hoạt động vì nó không ném *? Nếu sau này, bạn di chuyển muốn kiểm tra [những] (http://stackoverflow.com/questions/8788558/should-i-test-that-methods-dont-throw-exceptions) [hai] (http: // stackoverflow.com/questions/9417213/c-how-do-i-check-no-exception-occurred-in-my-unit-test) các câu hỏi tại sao nói chung bạn không làm điều đó. Bạn đạt được rất ít để không có gì từ thử nghiệm như vậy. –

+1

@jimmy_keen Như một trường hợp đặc biệt, đã sử dụng để kiểm tra rằng gọi Dispose() lần thứ hai không ném – Gareth

Trả lời

70
Assert.DoesNotThrow(() => { /* custom code block here*/}); 

HOẶC chỉ phương pháp

Assert.DoesNotThrow(() => CallMymethod()); 

Để biết thêm chi tiết, xem NUnit Exception Asserts

2

Có, không có ngoại lệ được ném -> kiểm tra vượt qua. Nếu có khối try-catch mà không phải ném lại thì nó cũng sẽ vượt qua.

2

Bạn là chính xác. Nếu có ngoại lệ thì thử nghiệm sẽ thất bại.

Trừ khi bạn chỉ định

[ExpectedException(typeof(YourException)) ] 
public void TestMethod() 
{ 
    ... 
} 

Hoặc như @sll nói, bạn sử dụng cụ thể hơn

Assert.DoesNotThrow 

assertion.

4

Không ném ngoại lệ là hành động bình thường. Kiểm tra của bạn sẽ xác minh thành công rằng một ngoại lệ không được ném.

1

Tôi nghĩ rằng có một vấn đề liên quan đến logic thử nghiệm đơn vị. Nếu bạn đang mong đợi một ngoại lệ cụ thể theo các đầu vào nhất định, bạn khai báo nó như là một ngoại lệ dự kiến. Nếu bạn chỉ kiểm tra xem chức năng của bạn có hoạt động đúng không và không có ngoại lệ nào được mong đợi trong hành vi thích hợp này, bạn chỉ cần viết nó và nếu nó ném bất kỳ ngoại lệ nào, kiểm tra của bạn không thành công.

Mã của bạn có vẻ hoạt động bình thường, mặt khác, chỉ kiểm tra không có trường hợp ngoại lệ có thể không phải là cách thích hợp để kiểm tra đơn vị. Trong các thử nghiệm đơn vị, nói chung bạn mong đợi một số kết quả đầu ra (giá trị dự kiến), bạn có một số đầu ra thực tế (giá trị thực tế) và bạn khẳng định rằng giá trị dự kiến ​​và thực tế là như nhau.

8

Sử dụng NUnit 3.0 Constraint Model loại khẳng định mã sẽ trông như sau:

Assert.That(() => SomeMethod(actual), Throws.Nothing);

Ví dụ này được lấy từ NUnit wiki.

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