【问题标题】:what is the appropriate way for writing JunitTestCases for this method为这种方法编写 JunitTestCases 的适当方法是什么
【发布时间】:2011-11-08 13:19:29
【问题描述】:

下面的代码是我的方法逻辑。

pulic String getData()
{ 
if (leg.length == 4)
      return "ATE";
  else  if (leg.length == 2) {
      return "FTE";
      }
    if (leg.length == 3) {
      if (xr1.KotilaType.equals("CST")) {
        return "HTE";
      }
      return "DTE";
    }
   return "BTE";
  }

按照我的要求,我需要开始为此方法编写 Junit 测试用例。

如您所见,该方法中只有一个方法和多个条件。

现在我的问题是, 我们是否需要为每个条件编写一个单独的 Junit TestCase(一个单独的方法)??

或者只写一个Junit TestCase并涵盖以上所有条件就足够了吗??

我是junit新手,不是专家,请指导我为上述方法编写JunitTestCases的合适方法是什么??

【问题讨论】:

    标签: unit-testing testing junit


    【解决方案1】:

    这是风格问题。以下是两种选择:多合一方法:

    public void testAll() {
        assertEquals("ATE", getData(leg4));
        assertEquals("FTE", getData(leg2));
        // etc.
    }
    

    使用一种测试方法/组合:

    public void testLength4() {
        assertEquals("ATE", getData(leg4));
    }
    
    public void testLength2() {
        assertEquals("FTE", getData(leg2));
    }
    

    前者的优点是很容易看到所有组合,因为它们都在一个地方。如果有很多组合或组合很复杂,这将非常有用。

    后者的优点是每个组合都有一个测试,因此很容易定位问题,因为(理论上)只有一个测试会失败。缺点:您很快就会用完测试方法的名称。 testLength4、testLength2、testLength3WithCST、testLength3WithoutCST。当您有很多组合时(比如一年中的每个月进行一次测试),这个缺点会变得特别糟糕。

    大多数时候,我使用一种测试方法/测试用例,但如果组合的数量开始变多,我会使用一种方法。这包含所有组合,因为我希望能够一次看到所有组合,看看我是否错过了任何组合。

    【讨论】:

    • 其实我会说单个测试用例是bad风格的。没有冒犯 =) 原因是如果您的第一个断言失败,那么您不知道其他断言是否会通过或失败。所以,你可能会看到失败,去修复一些代码,重新运行测试,然后发现......测试仍然失败!只是在一个不同的断言上。这也使得使用指标来确定构建的不稳定程度等变得更加困难。基本上,您是在用我们获得的信息来交换编写测试的便利性(通常编写一次,所以我们不妨花时间把它做好)从这些测试中。
    • @Kane 我同意,但是如果我有 20 个左右的组合,并且我正在更改代码,并且所有组合都在单独的测试中,那么如果我很难解决'已经涵盖了所有的情况。所以一般情况下,我有一个测试/用例,但我不介意同一个方法中的多个组合。
    • 很公平,我可以理解为什么会发挥作用。但是,如果您担心自己没有涵盖所有情况,您的代码覆盖率工具不应该告诉您吗?没有我我会迷路的。
    【解决方案2】:

    我会开始对每个可能的返回值进行五个单元测试,在每个测试中将被测对象的状态(leg.length 和 xr1.KotilaType)设置为适当的值。

    然后我会转移到涵盖边界值的测试,例如leg.length == 5、1 等。

    【讨论】:

    • 非常感谢 Matthew Farwell 和 Bedwyr Humphreys
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    相关资源
    最近更新 更多