Запускать модульные тесты в другом домене приложения с помощью NUnit - PullRequest
11 голосов
/ 09 марта 2012

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

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

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

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

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

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

Ответы [ 3 ]

30 голосов
/ 22 июня 2013

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

Пример кода:

[Test, RunInApplicationDomain]
public void Method()
{
  Console.WriteLine("I'm in a different AppDomain")
}
5 голосов
/ 09 марта 2012

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

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

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

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

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

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

2 голосов
/ 09 марта 2012

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

...