NUnit игнорирует DomainUsage в файле runsettings

Я запускаю тесты в Visual Studio, используя «Обозреватель тестов» с NUnit и файл .runsettings (указывается путем выбора параметра в графическом интерфейсе пользователя «Выбрать файл настроек»).

Мой файл настроек (называемый mytests.runsettings):

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <DisableAppDomain>True</DisableAppDomain>
  </RunConfiguration>
  <ForceListContent>true</ForceListContent>
  <NUnit>
    <DomainUsage>None</DomainUsage>
  </NUnit>
</RunSettings>

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

Но что бы я ни делал, он не работает без AppDomain!

Запуск из командной строки работает:

nunit3-console.exe --domain = None --inprocess MyTests.dll

Что мне нужно сделать, чтобы использовать этот параметр в NUnit?


person Don Rhummy    schedule 18.09.2019    source источник


Ответы (2)


Я не верю, что ты сможешь это сделать.

  1. Нет распознанного элемента DomainUsage под NUnit в файле runsettings. DomainUsage - это внутренне используемое свойство, которое будет учитываться, если установлено. Но вы не можете так настроить. Ваш элемент DomainUsage просто игнорируется.

  2. Если адаптер получил вашу DisableAppDomain настройку, он установит DomainUsage на None. Однако я не верю, что он действительно его получает.

Пункт 2 требует пояснений. Обратите внимание, что я не работал над адаптером несколько лет и иду по памяти, но вот он ...

Был добавлен параметр DisableAppDomain, позволяющий Visual Studio принудительно запускать NUnit без использования AppDomain. Предполагается, что обозреватель тестов настроит все так, чтобы было возможно работать таким образом, то есть убедившись, что все уже доступно в текущем домене.

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

Обоснованием этого прошлого решения было то, что Test Explorer полностью отвечает за настройку Process и AppDomain, используемых для запуска тестов. У пользователя нет возможности повлиять на это, как и у NUnit. Конечно, при использовании средства запуска консоли это не так - управление находится в руках пользователя.

Еще нужно выяснить, почему вы чувствуете необходимость работать без создания AppDomain теста. Но это, наверное, другой вопрос. :-)

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

ОБНОВИТЬ:

@Terje, который сейчас обслуживает адаптер, ответил и подтвердил, что нет никакого способа установить DomainUsage в файле runsettings или каким-либо другим известным нам способом при работе с тестовым адаптером. Документы были исправлены, чтобы избежать неявного предположения, что это возможно.

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

person Charlie    schedule 19.09.2019
comment
Я был сбит с толку, потому что этот документ (github.com/nunit/docs/wiki/ Советы и рекомендации) говорит, что вы можете установить DomainUsage в файле runsettings. Могу ли я установить DomainUsage через переменную окружения? Или через команду свойств проекта? - person Don Rhummy; 19.09.2019
comment
Возможно, это было возможно в то время, когда писали эти советы. Если вы посмотрите текущий код на github.com/nunit/nunit3-vs-adapter/blob/master/src/ вы можете видеть, что этот параметр игнорируется. Я уже просил Терье прокомментировать мой ответ. - person Charlie; 19.09.2019
comment
Спасибо, я ценю это и с нетерпением жду понимания Терье. Знаете ли вы, почему параметр Visual Studio не работает? Строка 238, кажется, указывает на то, что он должен: github.com/nunit/nunit3-vs-adapter/blob/master/src/ - person Don Rhummy; 19.09.2019
comment
Кто-то должен отладить это, чтобы понять это. Однако файл .runsettings не читается напрямую, IIRC, а через Test Explorer, так что все возможно. - person Charlie; 20.09.2019
comment
По поводу пункта 1: @charlie правильно, что [в настоящее время] этот элемент не может быть установлен из файла runsettings. Это должно было быть указано на вики-странице. Однако мне интересно, было ли это так все время. - person Terje Sandstrøm; 23.09.2019
comment
@charlie правильно, что [в настоящее время] этот элемент не может быть установлен из файла runsettings. Это должно было быть указано на вики-странице. Однако мне интересно, было ли это так все время. Если для параметра DisableAppDomain установлено значение true, для параметра DomainUsage будет установлено значение None. Если вы включите подробность (›4), вы увидите, что адаптер получает от этих настроек, и DisableAppDomain правильно считывается из файла runsettings. Затем он передается - person Terje Sandstrøm; 23.09.2019
comment
- движок / фреймворк, и он должен был работать так же, как и консоль. - person Terje Sandstrøm; 23.09.2019
comment
@terje Мне запомнилось, что команда TestExplorer использовала псевдо-запуск, чтобы сказать NUnit не создавать AppDomain. Они сделали это вместо того, чтобы реализовать какой-то другой канал для использования адаптера, который, я считаю, был бы чище. Я не думаю, что этот параметр действительно должен быть в пользовательской документации, поскольку его наличие подразумевает, что его можно использовать. - person Charlie; 23.09.2019
comment
@Charlie Я удалил его из документации. Я не вижу других настроек, влияющих на это. Единственные настройки, которые я вижу и помню, которые влияют на домен приложения, - это глобальный DisableAppDomain, и он обрабатывается. - person Terje Sandstrøm; 23.09.2019
comment
@ TerjeSandstrøm Спасибо за помощь. Я попытаюсь перепроверить, но, судя по нашему тестированию, настройка DisableAppDomain=true не работает. Мы получили разные результаты по сравнению с тем, когда мы использовали средство запуска консоли nunit и установили --domain=None - person Don Rhummy; 26.09.2019
comment
@DonRhummy Обратите внимание на обновление ответа. Когда вы устанавливаете DisableAppDomain на true, мы полагаем, что TestExplorer затем создает домен. С их точки зрения, это цель сеттинга. - person Charlie; 27.09.2019

Этот ответ является продолжением ответа от @charlie выше, просто нужно немного места здесь. Я проверил создаваемые домены в зависимости от того, установлен ли DisableAppDomain или нет. Когда отключенный домен приложения не установлен, домен приложения создается NUnit с базой приложения и понятным именем, как показано ниже:  введите описание изображения здесь

NUnitCheckDomain - это тестовая dll.

Когда отключен домен приложения установлен, NUnit больше не устанавливает свой собственный домен, и вы затем видите, что он работает под доменом приложения testhost, который является процессом, выполняющим все тесты:  введите здесь описание изображения

Так что, похоже, это работает так, как должно и может. Вам нужно, чтобы он работал под каким-либо другим доменом приложения, кроме одного из этих?

Кстати: если я запускаю тестовую сборку NUnitCheckDomain с помощью консоли NUnit3, то она а) работает при прямом запуске б) вылетает при использовании с параметрами, которые вы указали выше (domain = None и --inprocess), не имея возможности загрузить NUnit.Framework . @charlie - По какой-либо причине это не должно работать так же, используя NUnit3-Console?

person Terje Sandstrøm    schedule 29.09.2019
comment
Спасибо за помощь. Проблема в том, что мы используем IIS через HostedWebCore, который, похоже, должен находиться только в домене приложений по умолчанию. Это работает правильно при использовании NUnit в командной строке без домена, но VS Test создает домен приложения, отличный от домена по умолчанию, а затем вызывает эту проблему. Любые идеи? - person Don Rhummy; 30.09.2019