我正在使用 nunit 和 ninject 在 VS2012 中的新 MVC 4 解决方案中运行 ncrun。
当我第一次打开解决方案时,所有 50 个左右的测试运行并成功通过。
在我进行任何代码更改(即使只是添加了空白区域)之后,ncrun 报告我的大部分单元测试都失败了。如果我在 ncrunch 窗口中按“运行所有测试”,也会发生同样的事情。
但是,如果您点击“运行此处可见的所有测试”按钮,则所有 50 次测试再次通过,并且 ncrunch 报告一切都很好。
此外,当您单独运行每个测试时,它们每次都通过。
当他们确实失败时,他们似乎在我的 ninject 设置代码中失败了
错误:ControllerTestSetup 中的 TestFixtureSetUp 失败
public class ControllerTestSetup
{
[SetUp]
public void InitIntegrationTest()
{
var context = IntegrationTestContext.Instance;
context.Init();
context.NinjectKernel.Load<MediGapWebTestModule>();
}
[TearDown]
public void DisposeIntegrationTest()
{
IntegrationTestContext.Instance.Dispose();
}
}
public class IntegrationTestContext : IDisposable
{
private static IntegrationTestContext _instance = null;
private static readonly object _monitor = new object();
private IntegrationTestContext() { }
public static IntegrationTestContext Instance
{
get
{
if (_instance == null)
{
lock (_monitor)
{
if (_instance == null)
{
_instance = new IntegrationTestContext();
}
}
}
return _instance;
}
}
}
所有测试也在 resharper 测试运行器中运行,每次都没有问题。
有谁知道这可能是什么原因造成的?
我猜这与 Instance 属性中的单例锁定代码有关,但我不确定。
==================================================== ============================= 进度:
通过将其包装在 try catch 语句中并将错误写入输出窗口,我能够将其追踪到上述 ninject 设置方法中的错误。
该异常是由于尝试多次加载模块引起的,即使我绝对没有,也没有使用任何类型的自动模块加载。
这发生在线路上
LocalSessionFactoryModule.SetMappingAssemblies(() => new[] { typeof(ProviderMap).Assembly });
_kernel.Load<LocalSessionFactoryModule>();
_sessionFactory = _kernel.Get<ISessionFactory>();
其中 LocalSessionFactoryModule 是为 NinjectModule 类派生的 ninject 模块类。
为什么这只发生在 ncrun 上,我能做些什么来解决这个问题?有没有办法检查模块是否已经加载?