6

我最近发现了用于 MVC 测试的 Spring 项目:spring-test-mvc。这是一个很棒的工具,我计划在未来更多地使用它。

但是我注意到我的 Jenkins CI 有一个问题。问题是,当 MVC 集成测试在本地通过时,甚至在 Jenkins CI 作业中,问题出现在 Jenkins 的 Sonar 插件执行中。在这种情况下,我尝试使用“.andExpect()”方法完成的所有断言都失败了。是的,如果不使用 Sonar 插件,它们会通过。

例如

this.mockMvc.perform(get("/someController/some.action").param("someParam", "someValue"))
    .andExpect(status().isOk())
    .andExpect(content().type(MediaType.APPLICATION_JSON))
        .andExpect(request().sessionAttribute("someAttribute", notNullValue()));

在上面的测试内容类型和会话属性断言失败。有任何想法吗?提前致谢。

4

2 回答 2

0

这个问题由 spring-mvc 的好心人解决了。可以在提供的链接上找到更多详细信息。简而言之,就我而言,Sonar 使用 Cobertura 进行覆盖测试。

Cobertura 添加了接口HasBeenInstrumented,因此该类被装饰为 JDK 动态代理,这意味着具有一个接口的合成代理类不是很有帮助,因为它是 Cobertura 标记接口。结果,控制器永远无法正确发现任何注释。

通过添加元素proxy-target-class="true"来解决问题<tx:annotation-driven>

于 2012-05-16T07:40:07.103 回答
0

我也面临同样的问题。我们将 Cobertura jar 版本升级到最新版本。此更改使 JUnit 测试用例可以在本地和 Jenkins 中运行

于 2016-07-12T19:03:21.360 回答