使用NUnit在不同的appdomain中运行单元测试

本文关键字:appdomain 运行 单元测试 NUnit 使用 | 更新日期: 2023-09-27 18:27:11

我似乎遇到了一个问题,我们使用的应用程序使用了Ninject内核,并且包含了一个特定的配置,该配置与WCF调用的内容(用户名、令牌…)一起收集。

在此基础上,为用户分配了对应用程序的权限,这是通过Ninject内核中的特定实例来屏蔽的。

我们不能只是重新组合Ninject内核,我们想做的是运行几个Nunit测试,而是在一个单独的应用程序域中运行每个测试(每次使用不同的设置重新创建内核)。

我只找到了在不同的应用程序域中运行整个测试项目的方法,但没有找到每次测试的方法。

有办法解决这个问题吗?

不幸的是,Ninject配置不在我们这边,我们必须以这种方式"生活"它。

使用NUnit在不同的appdomain中运行单元测试

我需要做完全相同的事情,所以我创建了一个库,基本上接受当前测试,并在新的AppDomain中重新执行它。它是一个名为NUnit.ApplicationDomain的nuget包,是开源的。

示例代码:

[Test, RunInApplicationDomain]
public void Method()
{
  Console.WriteLine("I'm in a different AppDomain")
}

我认为没有一种方法可以在不重写NUnit代码的情况下解决它。我已经有一段时间没有进入NUnit代码了,但我很确定主要的应用程序域加载部分没有改变。

NUnit通常使用两个应用程序域。运行NUnit时创建的默认程序集和用于加载测试程序集及其引用的程序集的单独程序集。这样做的主要原因是允许卸载测试组件。你不能卸载dll,但你可以卸载appdomain。

您可能可以在每次测试中运行NUnit一次,并在命令行上通过测试,但这很糟糕,我不确定它是否会有帮助。

在NUnit 2.6中也可以利用Action Attributes,但要做到这一点,您需要做很多工作

您还可以在设置方法中创建一个新的应用程序域,并在每次测试中调用它。尴尬但可能。

很抱歉,我没有更完整的答案。

我不完全确定你的问题。然而,您似乎需要某种自定义实现。您考虑过自定义测试属性吗?然后可以将每个属性配置为在不同的应用程序域中运行?我只是在编造一些想法,但可能有更好的方法。