NUnit 忽略 runsettings 文件中的 DomainUsage

NUnit is ignoring DomainUsage in the runsettings file

我正在 运行使用 "Test Explorer" 和 NUnit 和 .runsettings 文件(通过在 GUI [=31= 中选择选项指定)在 Visual Studio 中进行测试])

我的设置文件(名为 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 中使用该设置?

我不相信你能做到。

  1. 运行设置文件中 NUnit 下没有可识别的 DomainUsage 元素。 DomainUsage 是内部使用的 属性,如果设置,将被尊重。但是你不能那样设置。您的 DomainUsage 元素只是被忽略了。

  2. 如果适配器接收到您的DisableAppDomain设置,那么它设置DomainUsageNone。但是,我不相信它真的收到了。

第 2 点需要一些解释。请注意,我已经有几年没有使用适配器了,我是凭记忆来的,但这里是...

添加了 DisableAppDomain 设置以允许 Visual Studio 强制 NUnit 尝试 运行 而不使用 AppDomain . Test Explorer 应该进行设置,以便它 可能 到 运行 那样,即通过确保当前域中的所有内容都已经可用。

为了防止滥用该功能,我相信测试资源管理器总是会覆盖任何用户提供的设置。同样,这是对几年前完成的工作的记忆,但您看到的结果似乎验证了它。

过去这个决定的理由是测试资源管理器完全负责设置用于 运行 测试的进程和 AppDomain。用户没有办法影响它,NUnit 也没有。当然,当使用控制台时 运行ner,情况并非如此 - 控制权在用户手中。

要调查的另一件事是 为什么 您觉得需要 运行 而没有创建测试 AppDomain。但这可能是另一个问题。 :-)

我会请一些比我记性更好的人也看看这个。

更新:

@Terje,现在维护适配器,回复并确认无法在 运行settings 文件中设置 DomainUsage 或我们知道何时 运行ning 下的任何其他方式测试适配器。文档已更正以避免隐含的暗示它是可能的。

我们相信,但尚未通过实验证实,只要 TestExplorer 使用此设置来禁止测试适配器创建它,它就会创建自己的 AppDomain。

此答案是上述@charlie 的答案的后续,这里只需要更多space。 我已经根据是否设置了 DisableAppDomain 检查了正在创建的域。 当禁用应用程序域未设置时,应用程序域由 NUnit 使用 applicationbase 和友好名称创建,如下所示:

NUnitCheckDomain 是测试 dll。

当disable app domainset时,NUnit不再设置自己的domain,然后你会在testhost appdomain下看到运行s,也就是运行 所有测试的过程:

所以这似乎可以正常工作。 您是否需要它 运行 在除其中之一以外的其他应用程序域下?

顺便说一句:如果我 运行 使用 NUnit3 控制台的 NUnitCheckDomain 测试程序集,那么它 a) 当 运行 直接工作时 b) 当与您在上面提供的参数一起使用时崩溃 (domain=None 和 --inprocess) 无法加载 NUnit.Framework。 @charlie - 使用 NUnit3-Console 这不应该同样工作的任何原因?