我正在测试一个调用
的类ContextRegistry.GetContext().GetObject("ISomething")
如果未定义ISomething则可以。所以我试图以两种方式测试它。由于此定义通常来自app.config文件,我不想在测试之间编辑该文件,我使用[TestFixtureSetUp]和[TestFixtureTearDown]来注册单例,测试,然后我想' un'-register it。注册就好了:
...ObjectFactory.RegisterSingleton("ISomething", new SomethingMOCK());
我可以查看它是否存在:
if (...ObjectFactory.ContainsSingleton("ISomething"))
但我似乎无法删除我注册的单身人士。我尝试使用null:
...ObjectFactory.RegisterSingleton("ISomething", null);
但这会抛出。还有更好的方法吗?
答案 0 :(得分:2)
据我所知,没有这样的功能。无论如何,这将是棘手的。如果单例在最终被删除之前已经连接到其他对象,那么语义应该是什么?可能无法将对象属性重新设置为null,因为您不能假设受影响的属性允许为null。如果对象是通过构造函数注入连接的,那么甚至可能没有setter方法。
答案 1 :(得分:0)
除了您始终可以使用新的XmlApplicationContext(“assembly:// myconfigresource”)实例化您自己的应用程序上下文之外,您可能还想查看Spring.NET的单元测试支持。参考文档包含专门的章节:http://www.springframework.net/doc-latest/reference/html/testing.html
HTH, 埃里希
答案 2 :(得分:0)
正如已经提到的:开箱即用,,但您可以通过代码轻松完成,而无需触及Spring.net 。只需使用代理模式并允许删除/更新委托目标,例如通过简单的get / set属性。您只需要一种获取IoC-Container创建对象的方法。