如何在使用Junit Parameterized.class时测试默认情况

时间:2015-02-20 02:02:12

标签: junit4 parameterized

我有一个旧版API:Foo()。现在我将API扩展到Foo(false),Foo(true)和Foo()应该像以前一样工作。

现在我使用Parameterized.class来执行Junit,参数列表是{null,false,true}。我想把测试用例写成:

@Test 
public void fooTest() {
    Foo(parameter);
}

但是Foo(参数)无法测试Foo(),所以我必须将测试代码编写为:

@Test 
public void fooTest() {
   if (parameter == null) 
       Foo();
   else 
       Foo(parameter);
}

有没有简单的方法来编写测试用例,这样我就不需要检查参数是否为null?我问这个是因为在扩展API之前的原始测试用例已经存在很多地方(见下文)并且我不想太多地更改测试代码。 :

@Test 
public void fooTest() {
    Foo();
}

1 个答案:

答案 0 :(得分:0)

一种方法是将Foo-Object(而不是构造函数参数)放入参数中,即{Foo(false), Foo(true),Foo()}而不是{null, false, true}

然而,请查看您的示例。可能它是一个真实问题的抽象。如果不是:

  • 缺少断言,这些断言应该包含在参数中(否则你会在断言阶段得到if-problem)。
  • 使用3个简单(未参数化)的单元测试
  • 可以更轻松地完成3个参数值的测试

当然,您可以将默认构造函数放入单独的(非参数化)测试类中。

哪种替代方案最好取决于抽象背后的实际问题。