Выполнять модульные тесты в разных приложениях с помощью 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

Я не совсем уверен в вашем вопросе. Однако кажется, что вам нужна какая-то индивидуальная реализация. Вы рассматривали пользовательские атрибуты теста? Затем может быть настроен каждый атрибут для запуска в другом домене приложения? Я просто разворачиваю некоторые идеи, но могут быть лучшие способы сделать это.