我必须测试一个实现其中一个接口的抽象类。 抽象类有一个带参数的构造函数。 我使用Mockito作为测试框架。 因此,如果我需要在抽象类中调用方法,那么最佳方法应该是什么?
如果我尝试子类化抽象类,它要求实现参数构造函数并且不允许编写no-arg构造函数。 此外,如果我尝试模拟没有无参数构造函数的类,并将sysouts放入方法中,通常我看不到它们被调用(模拟类是否需要强制的无参数构造函数?)尽管没有junit失败。 / p>
请帮忙。提前谢谢。
答案 0 :(得分:2)
测试抽象类的一种方法是实现它的concreate子类,仅用于测试。
如果抽象类只有一个带有参数的construtor,你可以做不同的事情:
您选择哪种方式取决于您的测试用例和抽象类的实现。 - 当然你可以混合各种方式。
示例:
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:测试使用抽象类的类是完全不同的。