Explicitly setting a test to pass/fail?
在下面的测试中,如果它进入catch块,我想表明测试已经过去了。 如果绕过catch块我希望测试失败。
有没有办法做到这一点,或者我错过了如何构建测试的重点?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [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 } |
当我遇到类似的情况时,我倾向于使用这种模式:
1 2 3 4 5 6 7 | // ... catch (UserCannotExecuteCommandException e) { return; // Test Passed } Assert.Fail(); // Test Failed -- expected exception not thrown |
声明测试以抛出UserCannotExecuteCommandException,当发生这种情况时,测试将成功
1 |
我建议使用Assert.Throws()方法:
1 | Assert.Throws<UserCannotExecuteCommandException>() => cmd.Execute(user)); |
我会做你需要的一切。 它期望在执行