在下面的测试中,如果它进入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
}
答案 0 :(得分:8)
当我遇到类似的情况时,我倾向于使用这种模式:
// ...
catch (UserCannotExecuteCommandException e)
{
return; // Test Passed
}
Assert.Fail(); // Test Failed -- expected exception not thrown
答案 1 :(得分:6)
声明测试以抛出UserCannotExecuteCommandException,当发生这种情况时,测试将成功
[ExpectedException( typeof( UserCannotExecuteCommandException) )]
答案 2 :(得分:1)
我建议使用Assert.Throws()方法:
Assert.Throws<UserCannotExecuteCommandException>() => cmd.Execute(user));
Id可以满足您的所有需求。它期望在执行UserCannotExecuteCommandException
方法时抛出类型cmd.Execute()
的异常,否则会自动将测试标记为失败。