C# 集成测试期间的IOC容器锁定
在执行签入时,我会运行集成测试,但每隔一段时间,我的容器就会被锁定C# 集成测试期间的IOC容器锁定,c#,integration-testing,simple-injector,C#,Integration Testing,Simple Injector,在执行签入时,我会运行集成测试,但每隔一段时间,我的容器就会被锁定 它发生在不同的集成测试中 这并不总是发生 错误是: 第一次调用GetInstance后无法更改容器, GetAllInstances、Verify和GetRegistration的一些调用。请看 要理解为什么容器是 锁着的 它刚才锁定的是这个实现: public SnsTests() { var container = new Container(); IocBo
public SnsTests()
{
var container = new Container();
IocBootstrapper.RegisterComponents(container);
_container = IocBootstrapper.GetConfiguredContainer();
}
我的每一个测试类都注册了一个IOC容器,如上面所述(我认为这可能是我的问题的很大一部分)。。。但是,我如何修复它
引导程序类:
public static class IocBootstrapper
{
private static Container _container = new Container();
public static void RegisterComponents(Container container)
{
_container = container;
IocConfig.RegisterTypes(container);
}
public static Container GetConfiguredContainer()
{
return _container;
}
}
尽管进行了状态集成测试,但测试似乎使用了导致竞争条件的共享资源 测试,无论是单元测试还是集成测试,都应该相互隔离以避免这种情况 建议在测试中单独执行引导程序中发生的操作
public SnsTests() {
var container = new Container();
IocConfig.RegisterTypes(container);
_container = container;
}
为什么在测试中使用容器?听起来好像测试使用的是导致竞争条件的共享资源。@我也怀疑有竞争条件,只是不确定它会是什么。。。我已经更新了帖子。@RandomUs1r您需要对您的设计进行审查。它太宽泛了,无法从显示的内容中确定正在使用的共享资源是什么。我最初查看的是
IocBootstrapper
您的问题遗漏了一些重要信息,这是异常消息的第二部分。.NET 4.0和.NET 4.5版本的Simple Injector将堆栈跟踪添加到异常消息中,该消息显示了导致容器锁定的代码路径。您使用的是.NET标准1.3版本的Simple Injector(不包括此信息),使用的是非常旧的版本,或者您没有添加完整的异常消息。