2

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

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

请帮忙。提前致谢。

4

1 回答 1

2

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

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

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

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

于 2010-11-24T07:03:41.353 回答