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

时间:2012-03-09 12:58:02

标签: c# unit-testing testing nunit ninject

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

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

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

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

有没有办法解决这个问题?

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

3 个答案:

答案 0 :(得分:29)

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

示例代码:

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

答案 1 :(得分:5)

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

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

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

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

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

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

答案 2 :(得分:2)

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