对于简单调用super.method()的方法,应该在junit中检查什么?

时间:2019-03-21 07:02:17

标签: java inheritance junit mockito assert

我有一个 junit方法,该方法仅调用super.method()
应该在junit中对此方法进行断言。

public String foo()
{
   return super.foo();
}

断言super.foo()被调用得足够多了。
或者,我也应该比较这些值。

3 个答案:

答案 0 :(得分:2)

这是一个有趣的问题,我怀疑在没有更多上下文和对该代码重要性的理解的情况下可以得到答复。

如果您想支持独立测试,那么我想说的是这里没有什么可以测试的。相反,我将确保super.foo()在超类的测试类中得到了很好的测试。这种方法的优点是,如果超类的行为发生变化,则单元测试仅需要在一个地方进行更新。

但是,如果此行为有很强的商业原因,那么也可以在此处测试该实现是否有意义。通过在单元测试中仔细地重复使用代码,可以最大程度地减少维护方面的麻烦。

实质上,选择哪种方法以及如何测试此方法归结为覆盖范围的完整性和持续维护成本之间的平衡。

答案 1 :(得分:1)

不要测试实现:请测试行为。也就是说,当您调用foo()方法时,它是否可以执行应有的功能?

除非调用super.foo()是子类foo()方法的 contract 的一部分,这几乎是代码的味道,但是有些测试框架可以明确声明如果调用了某些方法。 Spock是我的最爱(不确定语法,因为我从来不必断言对super的调用……更多传闻,即代码气味的证据。如果您仅调用super.foo()的方法,请将其删除并让类型层次结构为您完成。

答案 2 :(得分:1)

如果调用super方法是该方法唯一要做的事情,则不必首先创建该方法。 无论这是什么类,都将继承超类的所有方法,这意味着您可以调用foo()而不会覆盖它。

如果不是唯一的事情,您可以声明在super方法的junit测试中声明的内容。