Выполнять модульные тесты в разных приложениях с помощью NUnit
Кажется, у меня проблема, используемое нами приложение использует ядро Ninject и содержит определенную конфигурацию, собранную с содержимым вызова WCF (имя пользователя, токен...).
Основываясь на этой конкретной конфигурации, пользователю назначаются права на приложение, это защищается через конкретный экземпляр в ядре Ninject.
Мы не можем просто перекомпоновать ядро Ninject, что мы хотели бы сделать, это запустить несколько тестов Nunit, но запустить их в отдельном домене приложения (каждый раз обновляя ядро с разными настройками).
Я только нашел способы запуска целых тестовых проектов в разных доменах приложений, но не для теста на тест.
Есть ли способ решить это?
К сожалению, конфигурация Ninject не на нашей стороне, мы должны "жить" с ней таким образом.
Ответы
Ответ 1
Я не думаю, что есть способ решить проблему без повторной записи частей кода NUnit. Прошло некоторое время с тех пор, как я был внутри кода NUnit, но я уверен, что основная часть загрузки приложения не изменилась.
NUnit обычно использует два домена приложения. Значение по умолчанию, которое создается при запуске NUnit, и отдельное для загрузки тестовых сборок и сборок, которые они ссылаются. Основная причина в том, чтобы разрешить разгрузку тестовых сборок. Вы не можете выгружать DLL, но вы можете выгрузить приложение.
Возможно, вы сможете запустить NUnit один раз за тест и передать тест в командной строке, но это уродливо, и я не уверен, что это поможет.
Также возможно использовать Action Attributes в NUnit 2.6, но вы собираетесь сделать там много работы, чтобы сделать это.
Вы также можете создать новый домен приложения в своем методе настройки и вызвать его в каждом тесте. Неловко, но возможно.
Извините, у меня нет более полного ответа.
Ответ 2
Мне нужно было сделать то же самое, поэтому я создал библиотеку, которая в основном принимает текущий тест и повторно запускает его в новом AppDomain. Это пакет nuget под названием NUnit.ApplicationDomain и с открытым исходным кодом.
Пример кода:
[Test, RunInApplicationDomain]
public void Method()
{
Console.WriteLine("I'm in a different AppDomain")
}
Ответ 3
Я не совсем уверен в вашем вопросе. Однако кажется, что вам нужна какая-то индивидуальная реализация. Вы рассматривали пользовательские атрибуты теста? Затем может быть настроен каждый атрибут для запуска в другом домене приложения? Я просто разворачиваю некоторые идеи, но могут быть лучшие способы сделать это.