使用NUnit在不同的appdomain中运行unit testing

我似乎遇到了一个问题,我们正在使用的应用程序使用Ninject内核,并包含一个使用WCF调用内容(username,token …)收集的特定配置。

基于特定配置,用户被分配了应用程序的权限,这通过Ninject内核中的特定实例进行屏蔽。

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

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

有办法解决这个问题吗?

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

我认为没有办法解决它而不重写部分NUnit代码。 我已经进入NUnit代码已经有一段时间了,但我很确定主应用程序域加载部分没有改变。

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

您可以在每次测试时运行NUnit并在命令行上传递测试,但这很难看,我不确定它会有所帮助。

也可以在NUnit 2.6中利用Action Attributes ,但是你要在那里做很多工作。

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

对不起,我没有更完整的答案。

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

示例代码:

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

我不完全确定你的问题。 但是,您似乎需要某种自定义实现。 您是否考虑过自定义测试属性? 然后可以配置每个属性在不同的App域中运行? 我只是提出一些想法,但可能有更好的方法来做到这一点。