"简单"弹簧单元测试

时间:2014-10-27 23:41:45

标签: java spring unit-testing autowired

我正在尝试为继承的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而失败。

1 个答案:

答案 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