java - 测试具有带参数的构造函数的抽象类

标签 java junit mockito

我必须测试一个正在实现接口(interface)之一的抽象类。 抽象类有一个带参数的构造函数。 我使用 Mockito 作为测试框架。 那么如果我需要调用抽象类中的方法,最好的方法应该是什么?

如果我尝试子类化抽象类,它会要求实现参数构造函数,并且不允许编写无参数构造函数。 另外,如果我尝试模拟一个没有无参数构造函数的类,并将 sysouts 放入方法中,通常我看不到它们被调用(模拟的类是否需要强制的无参数构造函数?),尽管没有 junit 失败。

请帮忙。提前致谢。

最佳答案

测试抽象类的一种方法是实现它的具体子类,仅用于测试。

如果抽象类只有一个带参数的构造函数,你可以做不同的事情:

  • 将 null 传递给其参数
  • 将模拟对象传递给其参数
  • 将具体对象传递给其参数

您选择哪种方式取决于您的测试用例和抽象类的实现。 - 当然你可以混合使用这些方式。

示例:

abstract class A{
  A(Object o) {
  }
}

class TheNullWay extends A {
  TheNullWay() {
    super(null);
  }
}

class TheMockedWay extends A {
  TheMockedWay(Object o){
    super(o);
  }
}

new TheMockedWay(createMockedObject());

顺便说一句:测试使用抽象类的类是完全不同的事情。

关于java - 测试具有带参数的构造函数的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4263927/

相关文章:

java - 使我的处理器达到峰值的方法

java - IntelliJ Maven 项目中的特定 JUnit 测试失败

eclipse - 在 Eclipse 中为现有类中的新方法生成 JUnit stub

java - 在 spock 中模拟 Jdbc 接口(interface)

java - 使用 Jackson 和 Mockito 序列化对象时的无限递归

java - 从 Java 运行导入数据库 DOS 命令

带有任意 C 代码的 Java native 接口(interface)

java - Spring Boot 访问 application.properties 以进行 JUnit 测试

java - 是否可以在类的方法中 @InjectMocks 到临时对象实例中?

java - Maven:测试依赖项