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 中使用该设置?
我不相信你能做到。
运行设置文件中 NUnit
下没有可识别的 DomainUsage
元素。 DomainUsage
是内部使用的 属性,如果设置,将被尊重。但是你不能那样设置。您的 DomainUsage
元素只是被忽略了。
如果适配器接收到您的DisableAppDomain
设置,那么它会设置DomainUsage
到 None
。但是,我不相信它真的收到了。
第 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 这不应该同样工作的任何原因?
我正在 运行使用 "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 中使用该设置?
我不相信你能做到。
运行设置文件中
NUnit
下没有可识别的DomainUsage
元素。DomainUsage
是内部使用的 属性,如果设置,将被尊重。但是你不能那样设置。您的DomainUsage
元素只是被忽略了。如果适配器接收到您的
DisableAppDomain
设置,那么它会设置DomainUsage
到None
。但是,我不相信它真的收到了。
第 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 这不应该同样工作的任何原因?