2014-10-03 4 views
2

nunit-console, кажется, работает, как это (Params: /nologo /wait /labels ...)Может ли NUnit Console Runner сообщать о неудачных тестах на лету?

Он выдает только метку для каждого теста при запуске теста, например, так:

***** Our.Tests.Bla 
... here come some Console.WriteLine 
// Note that in case Our.Tests.Bla fails, nothing is reported here immediately 
***** Our.Tests.Blub 
... here come some Console.WriteLine 
***** Our.Tests.Foo 
... here come some Console.WriteLine 

Если какой-либо тест не пройден, он сообщает тест ошибки только в конце полного пробега.

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

Проблема заключается в том, что когда один тест зависает, вы не видите, какой или если предыдущий тест не удался, что затрудняет быстрое отслеживание проблемы. (Особенно, когда тесты висят на машине тестового сервера, или, может быть, у вас есть только журнал неудачного прогона.)

Я бы предпочел для NUnit сообщить о неудачных тестах, включая подробную ошибку, на лету/непосредственно перед началом следующего теста. Это возможно?

ответ

4

Один из способов сделать это, чтобы иметь Teardown в вашем файле тестов, который запускается при каждом завершении теста, который затем может вывести имя теста, если оно не выполнено.

[TearDown] 
    public void TearDown() 
    { 
     var status = TestContext.CurrentContext.Result.Status; 
     if(status != TestStatus.Passed) 
      Console.WriteLine("Test Failed: {0}", TestContext.CurrentContext.Test.FullName); 
    } 
+0

OK. Это кажется наполовину достойно управляемым. Хорошая идея, спасибо. –

1

Этот ответ основан на Andrew's answer

некоторых классов изменились в NUnit 3 поэтому метод TearDown должен быть изменен тоже. Результат выглядит следующим образом:

[TearDown] 
public void TearDown() 
{ 
    var status = TestContext.CurrentContext.Result.FailCount; 
    if (status > 0) 
     Console.WriteLine("Test Failed: {0}\r\nMessage:\r\n{1}", 
          TestContext.CurrentContext.Test.FullName, 
          TestContext.CurrentContext.Result.Message);   
} 
0

Вы можете использовать/этикетки. это, по крайней мере, поможет вам найти неудавшийся тест.