Ловля утверждает в NUnit - PullRequest
       18

Ловля утверждает в NUnit

6 голосов
/ 02 февраля 2012

Я хотел бы зарегистрировать некоторую контекстную информацию, когда тесты не пройдены (например, снимки экрана). Есть ли в NUnit Framework возможность расширения, где я могу это сделать? В идеале это будет:

    [TearDown]
    public void Down(AssertionException ex) {}

но у нас его нет. Я пытался создать надстройку, но не знаю, как ее зарегистрировать во время выполнения:

[NUnitAddin]
public class UITestCase : TestCaseBase, NUnit.Core.EventListener, NUnit.Core.Extensibility.IAddin {
   .............
    public void UnhandledException(Exception exception){}

    public bool Install(NUnit.Core.Extensibility.IExtensionHost host) {
        IExtensionPoint listeners = host.GetExtensionPoint("EventListeners");
        listeners.Install(this);
        return true;
    }

}

UITestCase - мой базовый класс для всех тестов пользовательского интерфейса. Install() метод просто не вызывается. Любые советы будут оценены.

Обновление: для регистрации надстройки необходимо запустить с NUnit runner (в моем случае это был TestDriven.Net плагин для VS) и EventListener члены правильно называются. Проблема в том, что все они вызывали после методов TearDown / TestFixtureTearDown (мой контекст потерян).

Пытался использовать TestContext.CurrentContext.Result в моем TearDown, но получил доступ к State или Status throws свойства NullReferenceException: (

Ответы [ 4 ]

3 голосов
/ 13 февраля 2012

Если вы намереваетесь запустить тесты вашего приложения в действии, NUnit - не лучший выбор, он просто не предназначен для такого использования. NUnit предназначен для модульных тестов, а не интеграционных тестов, которые будут проверять, как ваш пользовательский интерфейс интегрируется с логикой и данными. Когда выполняются модульные тесты (в том числе в nunit), снимок экрана не требуется - бегун тестов направляет вывод в файл журнала, который содержит все, что вы хотите знать о тесте, включая исключения.

Если вы пытаетесь выполнить тестирование пользовательского интерфейса, я рекомендую Watin для тестов WebApp и White для тестов приложений WPF / Winforms.

2 голосов
/ 20 июня 2012

После обновления до NUnit 2.6 TestContext.CurrentContext начал работать как положено.

2 голосов
/ 13 февраля 2012

Я думаю, что подход IAddin обладает наибольшим потенциалом, хотя EventListeners могут не соответствовать точке расширения, соответствующей вашим потребностям. Вы пробовали расширения TestCaseBuilders или TestDecorators ?

Например, документация TestDecorators гласит:

Назначение

TestDecorators могут изменять тест после того, как он был построен.

Точка расширения

Надстройки используют хост для доступа к этой точке расширения по имени:

IExtensionPoint testDecorators = host.GetExtensionPoint ( "TestDecorators"); Интерфейс

Объект расширения, передаваемый в Install, должен реализовывать Интерфейс ITestDecorator:

public interface ITestDecorator     
{       
    Test Decorate( Test test, MemberInfo member );  
} 

Метод Decorate может делать несколько вещей, в зависимости от того, что ему нужно сделать:

  1. Тест возврата без изменений
  2. Изменить свойства тестового объекта и вернуть его
  3. Заменить тест другим объектом, отбрасывая оригинал или агрегирование в новом тесте.

Звучит как хорошее место, чтобы попробовать обернуть тест пользовательским кодом.

0 голосов
/ 02 февраля 2012

Я думаю, что вы можете использовать try catch внутри вашего тестового метода, чтобы перехватить исключение, а затем выполнить какое-то пользовательское действие, например захват скриншота внутри catch.

...