JUnit测试方法不能返回值

赫拉尔Cauich:

为什么JUnit测试方法不能返回值?

文件说(重点煤矿):

试验方法和生命周期方法可以在本地当前测试类中声明,从超继承,或者从接口继承(见测试接口和默认的方法)。此外,试验方法和生命周期方法不能是抽象的,不能返回一个值

为什么执行这样的吗?

这是一个纯粹的设计选择?它是一个最好的做法?

davidxxx:

这是一个纯粹的设计选择?

是。从理论上讲,没有什么可以阻止JUnit运行(组分这就是运行测试类的测试)从接受为有效的测试方法具有返回值。

它是一个最好的做法?

确实。你越限制指定一个单元测试方法的方式,更可以确保不会发生误操作。

例如看看这个简单的例子,将假设的测试方法返回一个值。
一个addFoo()测试方法断言的方法所做的预期,并且也返回Foo创建夹具:

@Test
public Foo addFoo(){
   Foo foo = new Foo(...);

   // call the api ...
   sut.addFoo(foo); 

   // assertion
   assertEquals(...);

   // return the foo fixture
   return foo;
}

在这里,一个addFooBar()检索的测试方法Foo由以前的方法创建夹具,然后断言方法addFooBar()所做的预期:

@Test
public void addFooBar(){
   Foo foo = addFoo();
   Bar bar = new Bar(..., foo);

   // call the api ...
   sut.addFooBar(bar); 

   // assertion
   assertEquals(...);
}

这奠定了多个问题:

  • 是否该方法addFoo()应该被执行多次?它可能伤害到测试的执行速度,使测试报告不清楚。
  • addFoo()测试结果可能使addFooBar()测试结果的正确实施,吐失败。
    如何诊断问题的由来?我们增加无用的复杂性。
  • addFoo()测试结果可能使addFooBar()测试结果在不正确执行吐成功。事实上,在一个不正确的实现addFoo()可以补偿不正确的实施addFooBar()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档