2010-01-11 4 views
7

Để kiểm tra một cái gì đó ném ví dụ một ArgumentException tôi có thể làm điều này:C#, NUnit: cách rõ ràng về các thử nghiệm mà ArgumentException có đúng ParamName

Assert.Throws<ArgumentException>(() => dog.BarkAt(deafDog)); 

Làm thế nào tôi có thể kiểm tra rằng ParamName là chính xác trong một cách rõ ràng ? Và câu hỏi tiền thưởng: Hoặc bạn có lẽ có lẽ khuyên bạn nên không thử nghiệm này ở tất cả?

Trả lời

10

Tìm thấy một cách khá rõ ràng (nhưng xin vui lòng cho tôi biết nếu có ai có một thậm chí tốt hơn!)

var e = Assert.Throws<ArgumentException>(() => dog.BarkAt(deafDog)); 
Assert.That(e.ParamName, Is.EqualTo("otherDog")); 

Facepalm ...

+0

Đây là cách tiếp cận ưa thích của tôi. –

+1

Assert.IsTrue (e.ParamName == "otherDog")? :) – oldUser

+2

@alexm: Nhưng việc sử dụng sẽ tạo ra một thông điệp ít rõ ràng hơn khi thử nghiệm thất bại: * Độ dài chuỗi mong đợi 4 nhưng là 7. Các chuỗi khác nhau tại chỉ số 0. Mong đợi: "otherDog" Nhưng là: "somethingElse" * vs * Mong đợi : Đúng Nhưng là: Sai *. ;) – Svish

4

Nếu bạn muốn làm nhiều hơn với ngoại lệ hơn là chỉ khẳng định rằng nó được ném, sau đó Assert.Throws thực sự trả về ngoại lệ và bạn có thể làm điều này:

var exception = Assert.Throws<ArgumentException>(() => dog.BarkAt(deafDog)); 
// Assert something else about the exception 
+0

nhắn Đó là ju st thông báo sẽ được hiển thị nếu xác nhận không thành công? – Svish

+0

NUnit, 'Assert.Throws ' phương thức xác nhận trả về ngoại lệ. –

+0

@ João - cảm ơn, câu trả lời đã chỉnh sửa. –