使用单元测试的Setter或构造函数注入

时间:2012-06-21 10:11:22

标签: c# .net

我正在努力找出解决问题的最佳方法。我在类中有多个创建新对象的方法:

    public void ToBeTested()
    {
         ClassForExmaple classForExample = new ClassForExample();

         //Other logic.....
    }

    public void ToBeTested2()
    {
          ClassForExmaple2 classForExample2 = new ClassForExample2();

          //Other logic.....
    }

等.....

我总共有大约5个这些对象,我将使用构造函数注入,但这看起来非常混乱。因为他们中有一些我应该使用私有财产,还是有另一种方式?

我这样做,所以我能够模拟这些新的呼叫。

2 个答案:

答案 0 :(得分:2)

你应该使用构造函数注入。如果它因为你有太多的依赖关系而变得很混乱,那么你应该分解你的代码,这样你正在测试的类就没那么多了。

对某个类有太多依赖关系表明您可能没有关注Single Responsibility Principle

也就是说,5个依赖项(在某些情况下)可能没问题。

答案 1 :(得分:2)

在这种情况下使用构造函数注入似乎很好,因为看起来你有每种类型对象的单个实例。如果不是这种情况,您可以将工厂注入到类的构造函数中,并允许它根据需要创建对象。

我会避免嘲笑私人财产;如果您不得不诉诸于此,通常意味着您在类中隐藏了可测试的代码,这些代码应该更好地暴露给测试框架。公开要在外部设置的公共财产会更好。