【问题标题】:How to test default case when using Junit Parameterized.class使用 Junit Parameterized.class 时如何测试默认情况
【发布时间】:2015-02-20 02:02:11
【问题描述】:

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

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

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

但是 Foo(parameter) 不能测试 Foo(),所以我得把测试代码写成:

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

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

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

【问题讨论】:

  • 你能说得更具体一点吗?您是在谈论常用测试对象的构造函数吗?还是静态方法?我认为一个真实的例子可能会帮助我们帮助你。

标签: junit4 parameterized


【解决方案1】:

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

但请查看您的示例。可能它是对实际问题的抽象。如果没有:

  • 缺少断言,这些应包含在参数中(否则您会在断言阶段遇到 if 问题)。
  • 使用 3 个简单(未参数化)单元测试更容易使用 3 个参数值进行测试

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

哪种方案是最好的,很大程度上取决于你的抽象背后的真正问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2012-04-13
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多