我必须测试一个正在实现接口(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/