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

在执行签入时,我会运行集成测试,但每隔一段时间,我的容器就会被锁定

  • 它发生在不同的集成测试中
  • 这并不总是发生
  • 错误是:

    第一次调用GetInstance后无法更改容器, GetAllInstances、Verify和GetRegistration的一些调用。请看 要理解为什么容器是 锁着的

    它刚才锁定的是这个实现:

     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(不包括此信息),使用的是非常旧的版本,或者您没有添加完整的异常消息。