简单的注入器和单元测试?

问题描述

我们现在主要使用类注入,这在单元测试中效果很好,但是有一些(很多)代码直接调用容器,这会导致运行测试时出现问题。

在每个测试类中,我都有一个 SetupData() 方法,每个类都会运行一次。这将为这个特定的类测试添加数据。只要我不依次运行多个(类)测试,这就可以正常工作。如果我这样做,它会告诉我容器已锁定。

private void SetupData()
{
    TestEntityviewCache evCache;
    if (!_dataIsSetup)
    {
        evCache = new TestEntityviewCache();
        IOC.Current.RegisterSingleton<IEntityViewCache>(evCache);

        EntityView.GetEntityViewListMethod = (key) => evCache.Get(key);
        EntityView.GetEntityViewListByIdMethod = (key) => evCache.Get(key);
    }
    evCache = IOC.Current.Get<TestEntityviewCache>();

    evCache.Update(EntityViewKey.Mappning,false,MyModelData.CreateMappning(),null);
    evCache.Update(EntityViewKey.Kontrakt,MyModelData.CreateKontrakt(),null);
    evCache.Update(EntityViewKey.Folder,MyModelData.CreateFolder(),null);
    evCache.Update(EntityViewKey.Kontaktgrupp,MyModelData.CreateKontaktGrupp(),null);
}

我已尝试为每个班级测试重置或重新创建容器,但找不到解决方案?

最好的解决方案是替换所有直接的 IOC 调用,但此时工作量很大。

解决方法

在这种情况下,我不得不按顺序运行测试。