Question

Je suis en train de tester une classe qui appelle

ContextRegistry.GetContext().GetObject("ISomething")

et ça va si un ISomething n'est pas défini. J'essaie donc de le tester dans les deux sens. Puisque cette définition provient normalement du fichier app.config et que je ne souhaite pas l'éditer entre les tests, j'utilise [TestFixtureSetUp] et [TestFixtureTearDown] pour enregistrer le singleton, le test, puis j'aimerais " annulez-le. Cela enregistre très bien:

...ObjectFactory.RegisterSingleton("ISomething", new SomethingMOCK());

et je peux vérifier s'il est là:

if (...ObjectFactory.ContainsSingleton("ISomething"))

mais je n'arrive pas à supprimer le singleton que j'ai enregistré. J'ai essayé d'utiliser null:

...ObjectFactory.RegisterSingleton("ISomething", null);

mais cela jette. Y a-t-il un meilleur moyen?

Était-ce utile?

La solution

Pour autant que je sache, une telle fonctionnalité n'existe pas. Ce serait difficile, de toute façon. Quelle devrait être la sémantique si le singleton a déjà été connecté à d'autres objets, avant d'être éventuellement supprimé? Il peut ne pas être possible de redéfinir les propriétés d'un objet sur null, car vous ne pouvez pas supposer que NULL est autorisé pour les propriétés affectées. Si l'objet est câblé via une injection de constructeur, il se peut qu'il n'y ait même pas de méthode de définition.

Autres conseils

Outre le fait que vous pouvez toujours instancier votre propre contexte d'application à l'aide du nouveau XmlApplicationContext ("assembly: // myconfigresource"), vous pouvez également consulter le support de test unitaire de Spring.NET à cet effet. La documentation de référence contient un chapitre dédié: http: //www.springframework. net / doc-latest / reference / html / testing.html

hth, Erich

Comme déjà mentionné: il n’est pas possible de sortir de la boîte, mais vous pouvez le faire facilement via un code sans toucher Spring.net . Utilisez simplement un modèle de proxy et autorisez la suppression / mise à jour de la cible de délégué, par exemple. via une simple propriété get / set. Tout ce dont vous avez besoin est un moyen d’obtenir l’objet créé de votre conteneur IoC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top