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())
}
}
我的问题是为了测试子类的行为,我正在重复我为超类所拥有的测试代码。我可以拿出来:assertEquals(5, subclass.getSuperClassInteger());
因为我只想测试子类的业务逻辑。但是,这样做的问题是,如果有人不小心删除了superClassMethod
对测试的调用,仍然会通过。所以我需要验证是否调用了 super。测试这个用例的常用方法是什么?
注意:我知道组合/策略模式与继承有助于解决这个问题,但要解决这个问题,你基本上是在说我不应该重写方法并在我的代码中调用 super(我很难相信永远不会有用于)