1

我正在对一个调用的类进行单元测试

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

如果没有定义 ISomething 也没关系。所以我试图以两种方式测试它。由于此定义通常来自 app.config 文件,并且我不想在测试之间编辑该文件,因此我使用 [TestFixtureSetUp] 和 [TestFixtureTearDown] 来注册单例,测试,然后我想'取消注册。这很好地注册了它:

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

我可以检查它是否存在:

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

但我似乎无法删除我注册的单身人士。我尝试使用空值:

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

但这会抛出。有没有更好的办法?

4

3 回答 3

2

据我所知,不存在这样的功能。无论如何,这将是棘手的。如果单例在最终被移除之前已经连接到其他对象,那么语义应该是什么?可能无法将对象属性重新设置为 null,因为您不能假设受影响的属性允许为 null。如果对象是通过构造函数注入连接的,则可能甚至没有 setter 方法。

于 2009-03-13T21:47:07.840 回答
0

除了您始终可以使用 new XmlApplicationContext("assembly://myconfigresource") 来实例化您自己的应用程序上下文之外,您可能还想查看 Spring.NET 对此的单元测试支持。参考文档包含一个专门的章节:http ://www.springframework.net/doc-latest/reference/html/testing.html

hth,埃里希

于 2009-04-27T15:56:46.803 回答
0

正如已经提到的:开箱即用是不可能的,但是您可以通过代码轻松地做到这一点,而无需接触 Spring.net。只需使用代理模式并允许删除/更新委托目标,例如通过简单的 get/set 属性。您所需要的只是一种获取 IoC 容器的已创建对象的方法。

于 2013-01-17T17:24:31.967 回答