java - 如何对调用 super 的重写方法进行单元测试?

标签 java unit-testing junit

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 。您可以使用该测试框架检查几乎所有方法调用。

https://github.com/mockito/mockito

关于java - 如何对调用 super 的重写方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13761920/

相关文章:

visual-studio - 如何在Visual Studio测试运行器中排除某些测试?

java - 使用 h2 数据库的 JUnit 测试表现异常

android - 如何使用 mockk 库模拟 android 上下文

java - 使用集合时验证重复的用户条目

java - 不可能有一个基于数组的带有泛型的队列吗?

unit-testing - 安排 Jmeter 分布式测试

maven - 尝试使用 Maven Surefire 在不同的 JVM 上运行 JUNIT 测试

java - 为什么在我实现的插入排序中处理有序数组时,通用版比专用版慢4倍?

java - android - 回调函数 - 现在显示对话框

C# 单元测试设计问题 : How to reduce redundancy in unit test writing?