Как написать модульный тест, который должен завершиться ошибкой?

Если я провожу тест, который должен выдать фатальную ошибку, как я могу с этим справиться? Например, как я могу написать этот тест, чтобы убедиться, что переменная удалена правильно:

[Test]
public static void TestScope()
{
    String str;
    {
        str = scope .();
    }
    str.ToUpper(); // str should be marked as deleted here
}

1 ответ

Решение

Вы можете параметризовать Test атрибут как Test(ShouldFail=true).

В процессе тестирования сначала запускаются все тесты, которые не должны завершиться ошибкой, а затем все тесты, которые должны. Если какие-либо тесты, которые должны завершиться неудачей, не сработают, оставшиеся тесты, которые должны завершиться неудачей, все равно будут выполняться.

Например, тестирование этого класса:

class Program
{
    [Test(ShouldFail=true)]
    public static void TestScopeShouldFailButSucceeds()
    {
        String str;
        {
        str = scope:: .();
        }

        str.ToUpper(); // will not fail
    }

    [Test(ShouldFail=true)]
    public static void TestScopeShouldFail()
    {
        String str;
        {
        str = scope .();
        }

        str.ToUpper(); // will fail
    }

    [Test]
    public static void TestScopeShouldNotFail()
    {
        String str;
        {
        str = scope:: .();
        }

        str.ToUpper(); // will not fail
    }

    public static void Main()
    {

    }

}

... сначала успешно завершится TestScopeShouldNotFail, затем неожиданно завершится TestScopeShouldFailButSucceeds, то ожидаемо выйдет из строя TestScopeShouldFail. Таким образом, будет произведен один неудачный тест дляTestScopeShouldFailButSucceeds.

Другие вопросы по тегам