使用Sonar对Jenkins进行spring-test-mvc的问题

Ami*_*mak 5 unit-testing spring-mvc jenkins sonarqube

我最近发现了用于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()));
Run Code Online (Sandbox Code Playgroud)

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

Ami*_*mak 0

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

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

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