测试气味......这是一个好习惯吗?

时间:2012-09-20 12:37:06

标签: java junit4 mockito spring-test spring-test-mvc

我有两个测试他们是完全一样的...除了两件事,他们称之为两个单独的服务电话..因此,当我使用mockito我有两个单独的期望和验证线...

这就是我所做的:

@test
TestA {
   baseTest("player");
}

@test
TestB {
  baseTest("member");

}

BaseTest(type type) {
  ....
  .....
  if type(player) {
    Mockito.when(player service call)
  }
  else {
    Mockito.when(member service call)
  }

  // make the call in code

  //verify

  if(player) {
     verify player specific service call...
  }
  else {

  }
}

我认为以上是一种测试气味......只是感觉不对......

有没有比在我的baste测试中放置If语句更好的方法?

4 个答案:

答案 0 :(得分:4)

如果你看到重复的if语句,你可以使用多态。您应该在超类BaseTestSuper中对“播放器服务调用”和“成员服务调用”方法进行抽象,这也将拥有现有的BaseTest方法。

答案 1 :(得分:3)

您应该独立开发测试代码,并在有意义时加入。

以身作则。初始化代码的一条经验法则(Arrange / Act / Assert的第一个A)是:

  1. 你应该在测试中写下测试方法的所有编配部分。
  2. 如果您的方法与所有其他方法共享初始化,则将其置于@Setup方法
  3. 如果某些测试方法不共享该初始化,则可能是因为它不适合该测试用例。
  4. 所以我的结论是:

    1. 编写独立测试
    2. 如果他们分享你可以重构的东西
    3. 但不是太多(或者像“如果”那样奇怪的事情)!增加复杂性,而不是重复使用。
    4. 事实上@artbristol的回答是有道理的:如果你正在使用if的替代行为,请考虑多态性。只是我不确定它在哪个点上测试是否复杂(如果代码测试类似的类层次结构,则可能是有意义的。)

答案 2 :(得分:0)

我仍然只是分别实现2个测试类。代码长度和重复对于测试而言并不重要,代码可读性,彻底性和正确性优先。有鉴于此,只需分别实施2个测试用例。

答案 3 :(得分:0)

通常,您不应该为测试添加任何复杂性。首先,你可以在那里犯错误(即使在简单的ifs中)。其次,您的测试不再是文档,这意味着您无法轻易了解测试类的使用情况和行为。

所以这是一种气味。 :)