Wir verwenden UnityAutoMoq, um die meisten unserer Schnittstellen in unseren Komponententests zu verspotten, aber ich bin kürzlich in eine Situation geraten, in der wir ein Testframework verwenden wollen, um das tatsächliche Verhalten vollständiger zu simulieren (nennen Sie es ein Integrationstest, wenn das hilft, das zu akzeptieren, was ich tue).Generische Schnittstellen mit UnityAutoMoqContainer registrieren
Ich erwartete von UnityAutoMoq, dass ich konkrete Zuordnungen registrieren konnte, anstatt dem UnityAutoMoqContainer zu erlauben, sich auf das Interface zu verspotten. Dies gilt für alles, was ich versucht habe, außer für generische Schnittstellen. Falls Sie wie ich visuelle sind, ist hier ein Ausschnitt von dem, was ich versuche:
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
}
Wie man sich von oben sehen kann, ich bin die generische Schnittstelle zu einem allgemeinen konkreten Registrierung, dann bei der Injektion in Abhängigkeit Factory, um es mit dem eingehenden Typ zu lösen (die eigentliche Implementierung wurde der Einfachheit halber weggelassen). Dies funktioniert mit einem normalen UnityContainer, der den erwarteten Beton zurückgibt. Der UnityAutoMoqContainer gibt stattdessen einen Schein zurück, wobei die Injektionsfabrik vollständig umgangen wird.
Hat jemand versucht etwas wie was ich versuche zu erreichen? Irgendwelche Ideen?