显式地将测试设置为通过/失败
本文关键字:失败 设置 测试 | 更新日期: 2023-09-27 18:16:40
在下面的测试中,如果它进入catch块,我想表明测试已经通过。如果绕过了catch块,我希望测试失败。
是否有一种方法可以做到这一点,或者我是否错过了测试应该如何结构化的要点?
[TestMethod]
public void CommandExecutionWillThrowExceptionIfUserDoesNotHaveEnoughEminence()
{
IUserCommand cmd = CreateDummyCommand("TEST", 10, 10);
IUser user = new User("chris", 40);
try
{
cmd.Execute(user);
}
catch(UserCannotExecuteCommandException e)
{
//Test Passed
}
// Test Failed
}
当我遇到类似的情况时,我倾向于使用这种模式:
// ...
catch (UserCannotExecuteCommandException e)
{
return; // Test Passed
}
Assert.Fail(); // Test Failed -- expected exception not thrown
声明测试抛出UserCannotExecuteCommandException,当这种情况发生时,测试将成功
[ExpectedException( typeof( UserCannotExecuteCommandException) )]
我建议使用Assert.Throws()方法:
Assert.Throws<UserCannotExecuteCommandException>() => cmd.Execute(user));
Id做你需要的一切。它期望在执行cmd.Execute()
方法时抛出类型为UserCannotExecuteCommandException
的异常,否则会自动将测试标记为失败。
由于[ExpectedException(...)]
被认为是一个不好的做法,您可以使用:
- MSTest:
Assert.ThrowsException<UserCannotExecuteCommandException >( () => cmd.Execute(user) );
- NUnit:
Assert.Throws<UserCannotExecuteCommandException >( () => cmd.Execute(user) );
,那么你就可以指出哪一行应该抛出异常。