【发布时间】:2012-11-27 22:06:04
【问题描述】:
我有一个如下所示的课程
public class Abcd{
private @Value("${username}")
String username;
private @Value("${password}")
String password;
public Abcd(){
ServiceService serv = new ServiceService();
Service port = serv.getServicePort();
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
}
public void getSomeValueMethod(){
....
}
那么我该如何为此编写测试呢?当我从属性文件中读取值时,当我尝试调用构造函数进行测试时,由于用户名和密码为空,我得到一个空指针异常并且测试失败。有什么办法可以克服这个问题并成功测试吗?如何在调用构造函数之前设置这些带注释的值?
【问题讨论】:
-
你是从 spring 实例化 Abcd 还是在做一个新的 Abcd() ?你需要让 spring 给你这个对象的一个实例,让它自动注入依赖项。
-
我正在做新的 Abcd()。所以在实例化之前我没有设置任何值,所以测试失败。
-
我相信只有最新版本的 spring 或者至少高于 3.1 才能让你这样做。让 Spring 创建一个对象的实例(并因此在其中注入所需的所有依赖项)在你的 spring 配置文件中引用一个 bean 并要求它给你一个实例(例如link)或使用 junit 和 spring测试环境,在你的测试类中创建一个字段,并用
@autowired注解 -
在构造函数中完成所有工作的单独类看起来很奇怪。它试图绑定什么?.....upd:抱歉我看错了——它创建了一个单独的 BindingProvider 实例。
标签: spring testing constructor annotations mocking