Наличие отчета консоли NUnit о результатах тестирования во время выполнения теста, после каждого теста

StackOverflow https://stackoverflow.com//questions/22070217

  •  23-12-2019
  •  | 
  •  

Вопрос

Я запускаю консоль NUnit в своей тестовой сборке, но иногда мой NUnit выходит из строя (в настоящее время я выясняю почему).При сбое nunit отчет xml не создается, и я фактически остаюсь без какого-либо отчета о тестировании.Тестовый запуск очень длительный, и это плохая ситуация, если я потеряю весь отчет о тестовом запуске.Есть ли способ сообщить NUnit, чтобы он записывал xml-файл журнала по ходу работы (после каждого теста).Даже если это означает, что xml-файл не будет закрыт должным образом.Я знаю, что можно использовать NUnit TestListener.Но есть ли переключатель или что-то еще, что не включает в себя самостоятельное написание дополнительного кода?

Это было полезно?

Решение

Вы могли бы вызвать nunit-console с /labels переключатель командной строки.Это приведет к тому, что он будет записывать (полное) имя каждого теста в консоль по мере его выполнения, хотя выходные данные не будут включать результат теста.Однако это показало бы вам, какие тесты были успешно выполнены.

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

Другие советы

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

До этого нам не нужно написать какой-то пользовательский код, и в случае, если вы используете NUNIT <3.x, его довольно просто:
1) Вам необходимо создать слушатель событий, который реализует интерфейс EventListener
2) Этот интерфейс предоставляет уведомления для разных состояний выполнения тестирования, например,. RunStarted, запущенные или тестирование. Все, что вам нужно, это реализация регистрации, относящихся к вашему делу. Фрагмент из моего кода:

 public void RunStarted(string name, int testCount)
 {
     try
     {
         _instanceId = Environment.GetEnvironmentVariable("InstanceId");
         _buildId = Environment.GetEnvironmentVariable("BuildId");
         _browser = Environment.GetEnvironmentVariable("BrowserToTest");
         _template = Environment.GetEnvironmentVariable("TemplateToTest");
     }
     catch { }
 }

 public void TestFinished(TestResult result)
 {
     if (result.ResultState == ResultState.Ignored)
     {
         return;
     }
     var r = new TestingWorkerData
     {
         BuildId = _buildId,
         InstanceId = _instanceId,
         TestName = result.FullName,
         Success = result.IsSuccess,
         TimeTaken = result.Time.ToString(CultureInfo.InvariantCulture),
         Message = result.Message,
         StackTrace = result.StackTrace,
         Browser = _browser,
         Template = _template
     };         
     File.AppendAllLines(@"z:\\results.txt", new[] {JsonConvert.SerializeObject(r)});
 }

 public class TestingWorkerData
 {
     public string TestName { get; set; }
     public bool Success { get; set; }
     public string TimeTaken { get; set; }
     public string Message { get; set; }
     public string StackTrace { get; set; }
     public string InstanceId { get; set; }
     public string Browser { get; set; }
     public string Template { get; set; }
     public string BuildId { get; set; }
 }
.

3) Последнее, что создает Nunit Addin:

[NUnitAddin]
public class ProgressReporterNugetAddin : IAddin
{
    public bool Install(IExtensionHost host)
    {
        var listeners = host.GetExtensionPoint("EventListeners");
        listeners.Install(new ProgressReporterEventListener());
        return true;
    }
}
.

Примечание: есть довольно хорошая статья http: / /jimmykeen.net/2015/02/28/logging-test-results-with-nunit/ который охватывает аналогичный подход и многое другое.
К сожалению, это работает для nunit <3. B> Так как NUNIT3 был сильно переписан - например. Нет интерфейса EventListener больше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top