Как написать модульный тест, который должен завершиться ошибкой?
Если я провожу тест, который должен выдать фатальную ошибку, как я могу с этим справиться? Например, как я могу написать этот тест, чтобы убедиться, что переменная удалена правильно:
[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
.