如何对超级调用的重写方法进行单元测试?

mog*_*lol 4 java junit unit-testing

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();
   }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中我有:

public class SuperClassTest {
   public void testSuperClassMethod() {
       SuperClass superClass = new SuperClass();
       superClass.superClassMethod();
       assertEquals(5, super.getSuperClassInteger())
   }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个子类:

public class SubClass {
   private int subClassInteger = 2;

   public void subClassMethod() {
      super.superClassMethod();
      subClassInteger = 32;
   }

   public int getSuperClassInteger() {
      subClassInteger;
   }
}
Run Code Online (Sandbox Code Playgroud)

然后我测试子类:

public class SubClassTest {
   public void testSubClassMethod() {
       SubClass subClass = new SubClass();
       subClass.subClassMethod();
       assertEquals(5, subclass.getSuperClassInteger());
       assertEquals(32, subclass.getSubClassInteger())
   }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为了测试子类的行为,我正在重复我对超类的测试代码.我可以拿出来:assertEquals(5, subclass.getSuperClassInteger());因为我只想测试子类的业务逻辑.但是,这个问题是,如果有人意外删除了superClassMethod对测试的调用仍然会通过.所以我需要验证对super的调用.测试此用例的常用方法是什么?

注意:我知道组合/策略模式与继承有助于解决这个问题但是为了解决这个问题你基本上说我不应该覆盖一个方法并在我的代码中调用super(我很难相信它永远不会有用来)

sor*_*ito 5

使用mockito间谍.您可以使用该测试框架检查几乎任何方法调用.

http://code.google.com/p/mockito/