TestCustomException NUnit не заботится о типе исключения - PullRequest
2 голосов
/ 18 октября 2010

Если я хочу проверить, что метод выдает исключение определенного типа, атрибут ExpectedException в NUnit не заботится о реальном типе; если перед вызовом метода я генерирую универсальное исключение, тест проходит:

    [Test, ExpectedException(typeof(TestCustomException))]
    public void FirstOnEmptyEnumerable()
    {
        throw new Exception(); // with this, the test should fail, but it doesn't
        this.emptyEnumerable.First(new TestCustomException());
    }

Если я хочу проверить, что тест выдает точный тип исключения, я должен сделать что-то вроде руководства:

    [Test]
    public void FirstOnEmptyEnumerable()
    {
        try
        {
            throw new Exception();  // now the test fails correctly.
            this.emptyEnumerable.First(new TestCustomException());
        }
        catch (TestCustomException)
        {
            return;
        }

        Assert.Fail("Exception not thrown.");
    }

Я что-то упустил?

Ответы [ 3 ]

4 голосов
/ 18 октября 2010

Я никогда не использовал ExpectedException, поэтому у меня нет опыта, чтобы поделиться этим. Можно утверждать, что он выбрасывает непосредственно внутри теста. Примерно так:

[Test]
public void FirstOnEmptyEnumerable()
{
    Assert.Throws<TestCustomException>(() => this.emptyEnumerable.First(new TestCustomException()));
}

Я нахожу этот подход более читабельным, когда вы проверяете исключение именно там, где вы ожидаете, а не говорите "где-то внутри этой функции, я исключаю исключение".

0 голосов
/ 18 октября 2010

Если вы хотите использовать сигнатуру ExpectedException (string), рекомендуется использовать typeof (Exception) .Name и typeof (Exception) .Namespace

0 голосов
/ 18 октября 2010

Я всегда проверяю строковое представление исключения, например:

[Test, ExpectedException("Your.Namespace.TestCustomException")]
public void FirstOnEmptyEnumerable()
{
    throw new Exception(); // with this, the test should fail, but it doesn't
    this.emptyEnumerable.First(new TestCustomException());
}

, что, кажется, работает нормально для меня.

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