java“简单”Spring单元测试
我正在尝试为一个继承的基于Spring
的项目配置单元测试。我已经尝试了一些方法,但基本上我一直在尝试将@Autowired
内容添加到我的测试用例中。以下是我的设置:
控制器类如下所示:
@Controller("serverService")
@RequestMapping("/rest/server")
@Api(value = "server")
public class ServerServiceImpl extends AbstractServiceImpl implements ServerService {
@Override
@RequestMapping(value = "/getTime", method = RequestMethod.GET)
public @ResponseBody
GatewayResponse<TimeData> getTime() {...}
ServerService
只是一个支持与GWT
互操作的接口。我现在不太担心来自GWT
的单元测试
AbstractServiceImpl
的主要目的是包装一个基于SOAP
的web服务,该服务器本质上是代理的,使移动友好。web服务由Apache CXF
自动生成AbstractServiceImpl
大致如下:
public class AbstractServiceImpl {
@Autowired
private WebServices webServices;
public WebServices getWebServices() {
return webServices;
}
在我的测试课上,我有:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:**/applicationContext.xml", "classpath:**/applicationContext-Services.xml"})
@WebAppConfiguration
public class LoginTest {
@Autowired
private ServerServiceImpl svc;
public LoginTest() {
}
@Test
public void validate() {
assertNotNull(svc);
}
}
我没有兴趣尝试用模拟JSON之类的东西来创建对我的web服务的模拟调用。我只想编写单元测试,用未模拟的WebServices
对象创建未模拟的ServerServiceImpl
,并调用实时服务器
我的测试目前失败,因为@Autowired
无法创建ServerServiceImpl
。我还尝试过重构代码,对WebServices
使用@Autowired
,并将其传递给ServerServiceImpl
的构造函数,但由于@Autowired
的原因,这也失败了
# 1 楼答案
事实证明这非常简单。如果为应用程序上下文指定不存在的路径,Spring将抛出错误,例如:
上面将创建一条简单的错误消息,告诉您问题所在,即文件未找到异常。另一方面,该代码不会:
所以我的问题只是Spring找不到应用程序上下文XML。最终,我复制了一份live context,将其放入
src/test/resources
,并更新了我的pom.xml
和@ContextConfiguration
,如下所示: