Как использовать 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