2013-04-26 2 views
1

В тесте nunit мы можем утверждать, что если тест не выполняется при определенных обстоятельствах, то это пропуск (т. Е. Ожидается, что он попытается сбой).Утверждение, что неудача теста является успешной

Но он должен проходить при любых других обстоятельствах.

Дело в том, что тест может развалиться, прежде чем он сможет достичь своих утверждений.

Я имею в виду что-то в линиях

[TestSetup] 
void init() 
{ 
    if (condition==true) 
    { 
    Assert.That(this test fails); /*any feature to do this?*/ 
    } 
} 
+0

Я действительно не понимал. Вы утверждаете что-то в настройке теста? Может быть, попытайтесь привести свой настоящий пример. – gustavodidomenico

ответ

3

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

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

// do stuff 
bool success = DoStuff(); 
Assert.IsFalse(success); 
+0

Согласен. Хотя ваш ответ не тот, который я искал, все же я думаю, что это лучше, чем то, что я ищу. Благодарю. – dushyantp

0

Это немного трудно понять ваш вопрос. Вы хотите, чтобы Assert.Fail() был вынужден сбой? Как и ...

[TestSetup] 
public void Init() 
{ 
    if (condition==true) 
    { 
    Assert.Fail(); 
    } 
} 

Если вместо этого вы хотите проверки неудачи вместо вызывают один, вы должны следовать советам Арран и проверить для конкретного факта о работе вы проверяющего - например, возвращаемое значение метода.

+0

Я искал что-то вроде утверждения, что он терпит неудачу и не вызывает сбой. В любом случае, я думаю, что мой план действий был основан на шаткой основе, и, возможно, предложение Аррана (проверьте выше) лучше. Благодарю. – dushyantp

0

Вы также можете использовать объект «Действие» для вызова кода в действии и протестировать это действие, если оно является исключением. Посмотрите на FluentAssertions, у них много примеров.

int number1 = 1; 
    int number0 = 0; 
    Action someAction =() => { int j = number1/number0; }; 
    someAction.ShouldThrow<DivideByZeroException>();