Явная установка теста на прохождение / провал? - PullRequest
4 голосов
/ 04 декабря 2011

В тесте ниже, если он входит в блок 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 ]

8 голосов
/ 04 декабря 2011

Я склонен использовать этот шаблон, когда у меня похожая ситуация:

// ...
catch (UserCannotExecuteCommandException e)
{
    return;    // Test Passed
}

Assert.Fail();    // Test Failed -- expected exception not thrown
6 голосов
/ 04 декабря 2011

Объявите тест, чтобы выдать исключение UserCannotExecuteCommandException, когда это произойдет, тест завершится успешно

[ExpectedException( typeof( UserCannotExecuteCommandException) )]
1 голос
/ 05 декабря 2011

Я бы предложил использовать Assert.Throws () метод:

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

Id делает все, что вам нужно. Ожидается, что при выполнении метода cmd.Execute() будет сгенерировано исключение типа UserCannotExecuteCommandException, в противном случае автоматически помечается тест как неудачный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...