Как использовать ITestEventListener в NUnit 3?

Я хочу добавить собственный тестовый репортер в NUnit. Я уже сделал это с NUnit2, но теперь мне нужно использовать NUnit3.

Чтобы реализовать репортер, мне нужно получить из фреймворка различные события, такие как начало, конец и сбой тестов.

В NUnit2 я использовал NUnitHook зарегистрировать мой EventListener и это сработало довольно хорошо.

В NUnit3 мне нужно использовать механизм точек расширения, но когда я добавляю точку расширения в проект, VisualStudio (2012 ultimate) сразу же не может обнаружить тесты NUnit.

[TypeExtensionPoint(Description = "Test Reporter Extension")]
    public class MyTestEventListener : ITestEventListener
    {

        public void OnTestEvent(string report)
        {
            Console.WriteLine(report);
        }

    }

Если я удалю декларацию реализации ITestEventListener из класса, он заново откроет тесты.

[TypeExtensionPoint(Description = "Test Reporter Extension")]
    public class MyTestEventListener //: ITestEventListener
    {

        public void OnTestEvent(string report)
        {
            Console.WriteLine(report);
        }

    }

Я делаю что-то неправильно? Есть ли лучший способ достичь этого?

1 ответ

Решение

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

В будущем выпуске будет проще установить надстройки, но они будут по-прежнему полностью отделены от ваших тестов.

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

"ExtensionPoint" - это то, что вы расширяете. NUnit определяет ExtensionPoints, а вы создаете расширения для их расширения. TypeExtensionPointAttribute используется внутри NUnit для определения точек расширения. Это не используется вами. Вы используете ExtensionAttribute определить ваше расширение.

Ваше расширение должно быть определено примерно так:

[Extension(Description = "Test Reporter Extension", EngineVersion="3.4")]
public class MyTestEventListener : ITestEventListener
{
    public void OnTestEvent(string report)
    {
        Console.WriteLine(report);
    }
}

Вы не говорите, какую версию NUnit вы используете. Тестовые прослушиватели поддерживаются только начиная с версии 3.4. Приведенное выше свойство EngineVersion является чисто документальным, поскольку 3.4 также является первой версией, которая его распознает.

В документах NUnit может быть полезна новая запись: https://github.com/nunit/docs/wiki/Writing-Engine-Extensions

Другие вопросы по тегам