全局设置传递给实例或直接引用

时间:2009-06-01 02:56:51

标签: c# unit-testing class oop

我有一个Logging类,可以在启动控制台应用程序时实例化,并存储在静态变量中。

如果我想让一个类使用记录器,应该将它传递给构造函数中的类还是直接引用?

我正在尝试编写单元测试,无论哪种方式,我都应该能够做到。只是意味着我必须在调用使用它的代码之前设置静态变量。

干杯。

4 个答案:

答案 0 :(得分:1)

听起来你正在寻找的是某种IoC container。您可以使用EntLib's Unity或类似的其他内容。

答案 1 :(得分:0)

要使您的类尽可能地进行单元测试,应尽可能传递所有依赖项(包括记录器)。这就是所谓的依赖注入(DI),是一种非常常见的标准模式,用于编写单元可测试代码。记录几乎总是一个跨领域的问题,只是嵌入在方法体中,因为没有任何体面的AOP框架可以正确地将这些问题拉出来并以声明方式应用它们。编写/运行单元测试时必须处理日志记录只会增加测试的复杂性,可能会增加额外的配置问题,当你真的想让测试尽可能简单和有针对性时。

答案 2 :(得分:0)

如何使用Static Gateway Pattern

答案 3 :(得分:0)

您可以创建它的实例并将该实例存储为同一类的成员&通过财产返回。

e.g。 Logger.Default
这将返回对创建的实例的引用。

编辑:这方面的一个例子可能是Console class&这是SetOut方法。 我的意思是你可以继续使用Console.WriteLine ....如果你想改变流,使用SetOut方法。它将输出重定向到新流。

希望有所帮助。