http://stackoverflow.com/questions/6645263/unit-testing-overridden-methods-which-call-super(这个问题有类似的措辞但不一样)
我有一些类似的东西:
public class SuperClass {
private int superClassInteger = 2;
public void superClassMethod() {
superClassInteger = 5;
}
public int getSuperClassInteger() {
return superClassInteger();
}
}
然后在我的测试中我有:
public class SuperClassTest {
public void testSuperClassMethod() {
SuperClass superClass = new SuperClass();
superClass.superClassMethod();
assertEquals(5, super.getSuperClassInteger())
}
}
然后我有一个子类:
public class SubClass {
private int subClassInteger = 2;
public void subClassMethod() {
super.superClassMethod();
subClassInteger = 32;
}
public int getSuperClassInteger() {
subClassInteger;
}
}
然后我对子类的测试:
public class SubClassTest {
public void testSubClassMethod() {
SubClass subClass = new SubClass();
subClass.subClassMethod();
assertEquals(5, subclass.getSuperClassInteger());
assertEquals(32, subclass.getSubClassInteger())
}
}
我的问题是,为了测试子类的行为,我重复了父类(super class)的测试代码。我可以取出: assertEquals(5, subclass.getSuperClassInteger());
因为我只想测试子类的业务逻辑。然而,这样做的问题是,如果有人不小心删除了对 superClassMethod
的调用,测试仍然会通过。所以我需要验证是否调用了 super。测试此用例的常用方法是什么?
注意:我知道组合/策略模式与继承有助于解决这个问题,但要成为解决方案,你基本上是在说我永远不应该重写方法并在我的代码中调用 super(我很难相信会有永远不要用于)
最佳答案
使用 mockito spy 。您可以使用该测试框架检查几乎所有方法调用。
关于java - 如何对调用 super 的重写方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13761920/