我在 NUNIT 中很陌生,并且遇到了以下异常行为。
在我的测试项目中,我具有以下测试类:
namespace Tests
{
public class Tests
{
[SetUp]
public void Setup()
{
}
[Test]
public void Test1()
{
Assert.Pass("PASSED");
}
}
}
目前仅包含每次执行时应通过的 Test1()方法(因为我使用的是 Assert.Pass()方法)。
如果我运行此测试,则可以正常运行,并且测试通过(Visual Studio Test Explorer中的绿色条)。
但是,如果我尝试调试此方法(在 Assert.Pass(“ PASSED”); 行上放置breackpoint),则它会给我这个异常,以尝试执行Pass()方法:>
Exception thrown: 'NUnit.Framework.SuccessException' in nunit.framework.dll
An exception of type 'NUnit.Framework.SuccessException' occurred in nunit.framework.dll but was not handled in user code
PASSED
无论如何,该测试似乎已通过。但是为什么我要在调试模式下获得此异常?
答案 0 :(得分:2)
Assert.Pass
确实会引发异常,该异常使您可以向测试运行程序发送消息。您很少需要使用Assert.Pass
,因为您不需要这样做即可通过测试。您可以改为允许测试完成。
很显然,您的真实测试应该断言某事,但是通常您会检查一个值是否符合预期。如果是这样,就不会有例外。
从documentation ...
由于它会引发异常,因此仅允许测试返回就更有效
答案 1 :(得分:1)
阅读所用方法的文档始终是一个好主意:
/// <summary>
/// Throws a <see cref="SuccessException"/> with the message and arguments
/// that are passed in. This allows a test to be cut short, with a result
/// of success returned to NUnit.
/// </summary>
https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Assert.cs#L105