我正在尝试为继承的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服务,该服务器本质上是代理并使移动友好。该服务由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服务的模拟调用。我只想编写使用未模拟的ServerServiceImpl
对象创建未模拟WebServices
的单元测试,并调用实时服务器。
我的测试目前失败,因为@Autowired
无法创建ServerServiceImpl
。我还尝试重构我的代码以使用@Autowired
WebServices
并将其传递给ServerServiceImpl
的构造函数,但由于@Autowired
而失败。
答案 0 :(得分:0)
事实证明这非常简单。如果为应用程序上下文指定不存在的路径,则Spring将抛出错误,例如:
@ContextConfiguration("classpath:does-not-exist.xml")
以上将创建一个很好的简单错误消息,告诉您问题是什么,即文件未找到异常。另一方面,这段代码不会:
@ContextConfiguration("classpath:**/does-not-exist.xml")
所以我的问题只是Spring无法找到应用程序上下文XML。最后,我制作了一个实时上下文的副本,将其投放到src/test/resources
并更新了我的pom.xml
的{{1}}和surefire-plugin
,如下所示:
@ContextConfiguration