Je teste un code qui utilise StructureMap pour l'inversion de contrôle et des problèmes sont survenus lorsque j'utilise différentes classes concrètes pour la même interface.StructureMap n'est pas réinitialisé entre les tests NUnit
Par exemple:
[Test]
public void Test1()
{
ObjectFactory.Inject<IFoo>(new TestFoo());
...
}
[Test]
public void Test2()
{
ObjectFactory.Initialize(
x => x.ForRequestedType<IFoo>().TheDefaultIsConcreteType<RealFoo>()
);
// ObjectFactory.Inject<IFoo>(new RealFoo()) doesn't work either.
...
}
Test2 fonctionne très bien si elle fonctionne par lui-même, en utilisant un RealFoo. Mais si Test1 s'exécute en premier, Test2 finit par utiliser un TestFoo au lieu de RealFoo. Les tests NUnit ne sont-ils pas censés être isolés? Comment réinitialiser StructureMap?
Assez curieusement, Test2 échoue si je n'inclue pas l'expression Initialize. Mais si je l'inclue, il sera ignoré ...
Mon objet ObjectFactory ne possède pas ResetAll() ou une propriété Container ... est-ce nouveau dans 2.5.3? ... Mais quoi qu'il en soit, dites-vous qu'il est préférable d'utiliser l'injection de dépendance avec un IContainer? – parcydarks
Ils sont tous les deux disponibles dans la dernière version du tronc, que j'utilise depuis un moment - je ne suis pas sûr qu'ils aient été dans la dernière version. Et oui, pour les endroits où vous devez faire l'emplacement de service, je pense qu'il est préférable de le faire à partir d'un IContainer injecté, plutôt que d'appeler l'ObjectFactory statique directement. –