我们在单元测试中使用 UnityAutoMoq 来模拟我们的大部分接口,但我最近遇到了一种情况,我们希望使用测试框架来更完整地模拟实际行为(如果这可以帮助您接受什么,可以将其称为集成测试)我正在做)。
我希望 UnityAutoMoq 让我注册具体的映射,而不是让 UnityAutoMoqContainer 推迟到模拟接口。这适用于我尝试过的所有东西,除了通用接口。如果你像我一样有视觉效果,这里有一个我正在尝试的片段:
public static void Register(IUnityContainer container)
{
...
container.RegisterType(typeof(IService<>), typeof(TestFrameworkService<>),
new HierarchicalLifetimeManager(), new InjectionFactory(Create));
...
}
private static object Create(IUnityContainer container, Type type, string name)
{
var T = type.GetGenericArguments().Single();
return new TestFrameworkService<T>();// For simplicity, pretend this works
}
正如您从上面看到的,我将通用接口注册到通用具体,然后根据注入工厂使用传入类型来解决它(为简单起见,省略了实际实现)。这适用于普通 UnityContainer,返回预期的混凝土。UnityAutoMoqContainer 而是返回一个模拟,完全绕过注入工厂。
有没有人尝试过像我想要完成的事情?有任何想法吗?