明确设置测试通过/失败?

时间:2011-12-04 04:47:23

标签: c# unit-testing testing

在下面的测试中,如果它进入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
}

3 个答案:

答案 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()的异常,否则会自动将测试标记为失败。