2010-11-24 39 views
1

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

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

请帮忙。提前致谢。

+0

是受保护的抽象类参数构造函数吗?我也假设你从子类调用超参数化的超类,否则你会得到编译时错误。你能发布代码吗?如@Ralph所示,最好的方法是实现具体的子类,通常它是您实现的最终后代,如果您在层次结构中具有多个抽象类。这也是没有错误的证据,因为你假定没有任何抽象类从父级重写方法。在这种情况下,你需要测试父类和重载方法。 – pmu 2010-11-24 07:44:28

回答

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

顺便说一句:它是一个完整的不同事情来测试使用该抽象类的类。