简单的注入器和单元测试?
Simple Injector and unit test?
这些天我们主要使用 class 注入,这在单元测试中效果很好,但是有一些(很多)代码直接调用容器,这会导致问题,而 运行宁测试。
在每个测试 class 中,我得到了一个 SetupData()
方法,每个 class 将 运行 一次。这将为这个特定的 class 测试添加数据。只要我不进行 运行 多次 (class) 测试就可以正常工作。如果我这样做,它会告诉我容器已锁定。
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, false, MyModelData.CreateKontrakt(), null);
evCache.Update(EntityViewKey.Folder, false, MyModelData.CreateFolder(), null);
evCache.Update(EntityViewKey.Kontaktgrupp, false, MyModelData.CreateKontaktGrupp(), null);
}
我已经尝试为每个 class 测试重置或重新创建 continer,但我找不到解决方案?
最好的解决方案是替换所有直接 IOC 调用,但此时需要大量工作。
在这种情况下,我必须 运行 按顺序进行测试。
这些天我们主要使用 class 注入,这在单元测试中效果很好,但是有一些(很多)代码直接调用容器,这会导致问题,而 运行宁测试。
在每个测试 class 中,我得到了一个 SetupData()
方法,每个 class 将 运行 一次。这将为这个特定的 class 测试添加数据。只要我不进行 运行 多次 (class) 测试就可以正常工作。如果我这样做,它会告诉我容器已锁定。
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, false, MyModelData.CreateKontrakt(), null);
evCache.Update(EntityViewKey.Folder, false, MyModelData.CreateFolder(), null);
evCache.Update(EntityViewKey.Kontaktgrupp, false, MyModelData.CreateKontaktGrupp(), null);
}
我已经尝试为每个 class 测试重置或重新创建 continer,但我找不到解决方案?
最好的解决方案是替换所有直接 IOC 调用,但此时需要大量工作。
在这种情况下,我必须 运行 按顺序进行测试。