我有一个只调用super.method()
的junit 方法。
对于此方法,应该在 junit 中断言什么。
public String foo()
{
return super.foo();
}
断言super.foo()
被召唤得足够了。
或者,我也应该比较这些值。
这是一个有趣的问题,我怀疑如果没有更多的上下文和对这段代码重要性的理解,我是否可以回答。
如果你想支持孤立的测试,那么我会说这里没有什么可测试的。相反,我会确保super.foo()
在超类的测试类中得到了很好的测试。这种方法的优点意味着,如果超类的行为发生变化,单元测试只需要在一个地方更新。
但是,如果此行为有很强的业务原因,那么在此处测试该实现也是有意义的。通过在单元测试中仔细重用代码,它将最大限度地减少维护难题。
从本质上讲,选择测试什么以及如何测试此方法归结为覆盖范围完整性和持续维护成本之间的平衡。
如果调用 super 方法是此方法唯一执行的操作,则不必首先创建该方法。 无论这个类是什么,都会继承超类的所有方法,这意味着你可以调用foo()
而不重写它。
如果这不是它唯一做的事情,你可以断言你在超级方法的 junit 测试中断言的相同的东西。
不要测试实现:测试行为。 即,当您调用foo()
方法时,它是否执行了它应该执行的操作?
除非调用super.foo()
是子类foo()
方法的协定的一部分,这几乎是一种代码气味,但是有一些测试框架可以专门断言是否调用某些方法。Spock 是我的最爱(不确定语法,因为我从来没有断言对超级的调用......尽管是轶事,但代码气味的证据。如果您的方法仅调用super.foo()
,请将其删除并让类型层次结构为您执行此操作。