Chúng tôi đã sử dụng NUnit & VisualStudio để viết mã C# .NET trong một thời gian. Kiểm tra ngoại lệ được thực hiện theo phong cách củaExceptionAsserts & debugging dự án C# của bạn trong VS
cú pháp cũ:
[Test]
[ExpectException(typeof(ExceptionType))]
public void TestExceptionType()
{
}
Bây giờ NUnit đã phát hành phiên bản 2.5.2 mà giới thiệu Assert.Throws(Type expectedExceptionType, TestDelegate code);
Điều này làm cho ngoại lệ thử nghiệm một toàn bộ rất nhiều linh hoạt hơn. kiểm tra ngoại lệ của chúng tôi bây giờ nhìn như thế này:
cú pháp mới:
[Test]
public void TestWithNullBufferArgument()
{
ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() => _testInstance.TestFunction(null));
// now you can examine the exception and it's properties
Assert.AreEqual(ex.Message, "Argument was null");
}
vấn đề của chúng tôi là nếu Assert.Throws được sử dụng Visual Studio sẽ ho lên một cửa sổ hiển thị một ngoại lệ unhandled khi NUnit (hoặc giao diện điều khiển hoặc GUI Á hậu) được sử dụng để gỡ lỗi chương trình.
để làm rõ điều này: chúng tôi đã thiết lập dự án VS chứa các kiểm tra đơn vị để chạy nunit-x86.exe khi gỡ lỗi. (Xem thuộc tính dự án, tab gỡ lỗi, bắt đầu hành động được thiết lập để chạy nunit-x86.exe)
Điều này ngăn NUnit tiếp tục thử nghiệm. Có thể tiếp tục gỡ lỗi/thử nghiệm đơn vị bằng cách nhấn F5 nhưng đây không phải là giải pháp khả thi.
Có cách nào để tránh điều này không? Đặt một thử ... bắt khối xung quanh Assert.Throws không có gì vì ngoại lệ xảy ra trong mã đại biểu.
Tôi hy vọng ai đó có thể làm sáng tỏ điều này.
Ví dụ kiểm tra bạn hiển thị không tuân theo cú pháp bạn hiển thị. Ngoài ra, những gì bạn có nghĩa là "khi NUnit ... được sử dụng để gỡ lỗi chương trình?" Bạn có nghĩa là bạn chỉ đang chạy thử nghiệm, hoặc là bạn chạy thử nghiệm trong trình gỡ lỗi (tôi biết TestDriven.NET có thể làm điều này, không biết về các NUNit runners)? – Jay
Xin chào Jay! Xin lỗi vì sự nhầm lẫn. Có hai loại cú pháp khác nhau được hiển thị: mới và cũ. Chúng ta đã chuyển từ cú pháp cũ sang cú pháp mới, bây giờ sử dụng ràng buộc Assert.Throws <>. Chúng tôi đang chạy thử nghiệm trong các trình gỡ rối, nó đã hoạt động tốt cho đến nay và rất dễ dàng để xem những gì đang xảy ra vì VS sẽ chuyển thẳng đến điểm xảy ra ngoại lệ. Với cú pháp mới, chúng tôi nhận được tất cả các kiểm tra ngoại lệ là "sai tích cực", với cú pháp cũ chỉ có ngoại lệ thực sự sẽ làm gián đoạn việc thực thi. –