Запустите модульные тесты в другом домене приложения с помощью NUnit.

Кажется, у меня возникла проблема: используемое нами приложение использует ядро ​​​​Ninject и содержит определенную конфигурацию, собранную с содержимым вызова WCF (имя пользователя, токен...).

В зависимости от конкретной конфигурации пользователю назначаются права на приложение, это защищено с помощью определенного экземпляра в ядре Ninject.

Мы не можем просто перекомпоновать ядро ​​Ninject, нам бы хотелось запустить пару тестов Nunit, но запустить каждый из них в отдельном домене приложения (каждый раз пересоздавая ядро ​​с разными настройками).

Я нашел только способы запускать целые тестовые проекты в разных доменах приложений, но не тестировать каждый тест.

Есть ли способ решить эту проблему?

К сожалению, конфигурация Ninject не на нашей стороне, нам приходится «жить» с этим таким образом.


person Snake    schedule 09.03.2012    source источник


Ответы (3)


Я не думаю, что есть способ решить эту проблему, не переписывая части кода NUnit. Прошло некоторое время с тех пор, как я был внутри кода NUnit, но я почти уверен, что основная часть загрузки домена приложения не изменилась.

NUnit обычно использует два домена приложений. Тот, который создается по умолчанию при запуске NUnit, и отдельный для загрузки тестовых сборок и сборок, на которые они ссылаются. Основная причина этого заключается в том, чтобы разрешить выгрузку тестовых сборок. Вы не можете выгрузить dll, но вы можете выгрузить домен приложения.

Возможно, вы сможете запустить NUnit один раз за тест и пройти тест в командной строке, но это уродливо, и я не уверен, что это поможет.

Также можно использовать атрибуты действий в NUnit 2.6, но вы собираются сделать много работы там, чтобы сделать это.

Вы также можете создать новый домен приложения в своем методе настройки и вызывать его в каждом тесте. Неловко, но возможно.

Извините, у меня нет более полного ответа.

person Mike Two    schedule 09.03.2012

Мне нужно было сделать то же самое, поэтому я создал библиотеку, которая в основном берет текущий тест и повторно выполняет его в новом AppDomain. Это пакет nuget с именем NUnit.ApplicationDomain и с открытым исходным кодом.

Пример кода:

[Test, RunInApplicationDomain]
public void Method()
{
  Console.WriteLine("I'm in a different AppDomain")
}
person zastrowm    schedule 22.06.2013
comment
Любое решение для .NET Core? - person tchelidze; 17.12.2019
comment
Нет, не сейчас. Единственное, о чем я могу думать, это другой процесс, но это действительно тяжело - person zastrowm; 18.12.2019

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

person Spock    schedule 09.03.2012