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

时间:2010-11-24 06:08:20

标签: java junit mockito

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

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

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

  • 将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());

BTW:测试使用抽象类的类是完全不同的。