TDD中对象初始化的良好实践

时间:2014-03-15 17:23:58

标签: tdd

我刚开始研究TDD,但我只需要了解一些关于在设置或本地方法中初始化对象的事情。

让我解释一下'。

案例1:

Public Class TestCase{
 LoginClass obj;
  public void TearUp(){
   obj = LoginClass
  }

public void TearDown(){
dispose(obj);
}

案例2:

 Public Class TestCase2{
    public void Validate(){
     LoginClass obj = new LoginClass();
   }
     public void ValidateSharepoint(){
     LoginClass obj = new LoginClass();
   }

}

所以,有两种情况 情况1:对象正在初始化setUp方法并处理掉TearDown方法。 案例2:对象在方法中进行本地初始化。

两者都做同样的工作但两者都有不同的周期。

哪种情况遵循最佳做法?

3 个答案:

答案 0 :(得分:2)

我倾向于避免使用setup和teardown方法。它们可以帮助减少测试类中的代码,但往往会隐藏需要在将来修改代码的开发人员的详细信息。因为代码的读取方式比更改代码更能让您更容易阅读的任何内容都会有所帮助。我会坚持在工厂方法中初始化对象。 例如CreateValidator()使用依赖项的默认值(通常是mocks)。最好还是遵循Test Data Builder模式(Fluent Builder)。在Google上快速搜索会向您展示一个示例。如果您可以访问PluralSight,Mark Selman有一个关于高级单元测试的优秀视频,可以帮助您。

答案 1 :(得分:1)

如果在每个测试用例中以相同的方式初始化被测试的类,我发现最好将初始化放在SetUp方法中,或者至少是它的默认初始化,以便从测试用例中保存冗余无意义的代码。

如果您发现自己以不同的方式初始化每个测试,那么最好创建初始化方法 - 如InitializeUnauthorizedUser()或更好,正如安德鲁所说,使用测试数据生成器模式,如here所示。

答案 2 :(得分:0)

这实际上是一个非常乏味的问题,没有正确的方法可以做到这一点。 正如安德鲁指出的那样,尽量避免过多地设置或拆解。

另一方面,如果你的系统很复杂,这通常会导致一遍又一遍地做同样的事情。

如果你在团队中工作,最好是在设置过程中决定“团队对于众所周知/显而易见的感觉” - 这些事情可以放入设置方法中,并为每个人节省工作

如果你自己工作,那么你需要自己讨论一下。 在为系统找到良好的平衡之前,您可能会经历不同的迭代。