我正在为一个具有另一个抽象类对象的类编写一个Junit测试用例。
我试图在我的应用程序上下文中为这两个类定义bean,但它给出了
Could not instantiate bean class: Is it an abstract class?; nested exception is java.lang.InstantiationException
这是情况。
我的抽象类:
public abstract class classA{
public returnType methodA{//method logic}
public returnType methodB{//method logic}
}
另一个使用抽象类对象的类
public class classB {
@Autowired
classA classa;
public returnType methodB{
variable c = classa.methodA();
variable d = somelogic(c);
return d
}
}
我的applicationContextTest是
<bean id="classa" name="classa" class="package.classA"/>
<bean id="classb" class="package.classB">
<property name="classa" ref="classa"></property>
</bean>
并且我没有编写这个类,所以我不知道为什么作者没有扩展抽象类,我不能在类定义中做任何改变。
自动装配在应用程序中完美运行,我已在应用程序中启用了bean的组件扫描。 但对于测试应用程序上下文,我手动定义bean定义。
答案 0 :(得分:2)
如果要“实例化”抽象类,那么只有一个解决方案:使用子类。如果子类尚不存在,创建它:
package mypackage;
public class MyClassA extends classA {
// Implement all abstract methods here, even if it is just a dummy implementation
}
您的弹簧配置应为:
<bean id="classa" name="classa" class="mypackage.MyClassA"/>