0

我正在使用带有 NUnit 和.runsettings文件的“测试资源管理器”在 Visual Studio 中运行测试(通过在 GUI“选择设置文件”中选择选项来指定)

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

4

2 回答 2

2

我不相信你能做到这一点。

  1. runsettings 文件中没有可识别的DomainUsage元素NUnitDomainUsage是一个内部使用的属性,如果设置,它将被尊重。但你不能这样设置。您的DomainUsage元素只是被忽略了。

  2. 如果适配器收到您的DisableAppDomain设置,那么它将设置DomainUsageNone. 但是,我不相信它实际上正在接收它。

第 2 点需要一些解释。请注意,我已经有几年没有在适配器上工作了,我正在记忆中,但这里是......

添加该DisableAppDomain设置以允许Visual Studio强制 NUnit 尝试在不使用AppDomain. 测试资源管理器应该进行设置,以便可以以这种方式运行,即确保当前域中的所有内容都可用。

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

过去做出这一决定的理由是,Test Explorer 完全负责设置用于运行测试的 Process 和 AppDomain。用户无法影响这一点,NUnit 也没有。当然,在使用控制台运行器时,情况并非如此——控制权在用户手中。

其他需要调查的是为什么您觉得需要在没有AppDomain创建测试的情况下运行。但这可能是另一个问题。:-)

我会请一些可能比我记忆力更好的人也来看看这个。

更新:

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

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

于 2019-09-19T07:08:30.640 回答
0

这个答案是对上面@charlie 的回答的后续,这里只需要更多的空间。我根据是否设置了 DisableAppDomain 检查了正在创建的域。当禁用应用程序域未设置时,应用程序域由 NUnit 创建,应用程序库和友好名称如下所示: 在此处输入图像描述

NUnitCheckDomain 是测试 dll。

当设置了 disable app domain 时 NUnit 不再设置自己的域,然后你会看到它在 testhost appdomain 下运行,这是运行所有测试的进程: 在此处输入图像描述

所以这似乎以它应该和可以的方式工作。您是否需要它在其他应用程序域下运行,而不是其中之一?

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

于 2019-09-29T20:27:28.263 回答