关于c#:明确设置测试通过/失败?

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
[ExpectedException( typeof( UserCannotExecuteCommandException) )]


我建议使用Assert.Throws()方法:

1
Assert.Throws<UserCannotExecuteCommandException>() => cmd.Execute(user));

我会做你需要的一切。 它期望在执行cmd.Execute()方法时抛出类型UserCannotExecuteCommandException的异常,否则自动将测试标记为失败。