0

我在使用 Spring Framework 3.2 实现 Spring MVC 测试时遇到了一些问题(遵循http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/testing.html#spring-mvc-test-框架)。

总结一下:

我使用 Maven 3.0.4。

我有多个使用 Spring Framework 的项目。相关项目层次结构是:

  • 常见的
  • 网络服务(使用 common 和 dao)

在网络服务中,我有一个控制器

package com.lalala;
...
@Controller
@RequestMapping("/")
public class WebServicesController {
    @Autowired private WebService webService;

    //some methods...
}

WebService 类被声明为接口并具有实现。

现在,测试:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("/testApplicationContext.xml")
public class WebServicesTest {

private MockMvc mockMvc;

@Before
public void setUp() {
    this.mockMvc = MockMvcBuilders.standaloneSetup(new WebServicesController()).build();
}

@Test
public void inexistentService() throws Exception {
    mockMvc.perform(get("webservices/pong").accept(MediaType.APPLICATION_JSON)).andExpect(status().is(500)).andDo(print());
}

}

和配置文件 testApplicationContext.xml :

<beans ... >
    <import resource="classpath:spring-hibernate-test.xml"/>
    <tx:annotation-driven/>
    <context:annotation-config />
    <context:component-scan base-package="com.lalala"/>
</beans>

当我尝试在 Eclipse 中启动测试时,出现 java.lang.NoClassDefFoundError: Caused by: java.lang.ClassNotFoundException: com.lalala.WebServicesController。有人能告诉我我的配置和测试有什么问题吗?

(除此之外,该项目一旦部署在 tomcat 中就可以正常工作,只是为了知道我是否编写了错误的测试,我尝试启动已经存在的测试,这些测试在 jenkins 上完美运行。它们在本地无法运行。)

4

3 回答 3

0

您的问题在于已部署的资源“库”,您在构建路径中使用的库应该部署在您的项目中。

属性 > 部署程序集 > 从构建路径添加库

于 2013-07-30T13:52:52.503 回答
0

我认为这是一个类路径问题,或者一个简单的构建问题。我认为它与 Spring MVC 没有特别的关系。特别是因为您使用的是 Maven。

如果使用 Eclipse Maven 插件,请运行

mvn eclipse:eclipse 

在命令行上,在您的项目文件夹中

然后在 Eclipse 中检查以下内容。

  • '项目 | 自动构建'被选中
  • WebServicesController 在 src/main/java 分支(不是 src/test/java)
  • src/main/java 是项目在 Java 构建路径中。右键单击 Eclipse 中的项目并检查设置。

一旦检查,做一个'项目| Eclipse 中的“清洁”

于 2013-07-30T14:05:52.310 回答
0

这是一个明显的类路径问题。这是我解决这个问题的方法:

  • 首先找出存在问题类文件的jar文件。如果您不知道如何找到特定类的 jar 文件,您可以查看 eclipse 快捷方式来执行此操作,或者您可以简单地在 Eclipse 中执行“Ctrl+T”并输入类的名称,它将列出所有 jar 在它们出现在 Eclipse 类路径中的顺序。

  • 检查您的类路径是否包含该 jar,如果您的类路径不包含该 jar,则只需将该类添加到您的类路径中。

  • 如果它存在于您的类路径中,那么您的类路径很可能被覆盖,或者应用程序正在使用 jar 文件或启动脚本中指定的类路径,并修复您需要找到应用程序使用的确切类路径的问题。

于 2013-07-30T13:54:53.073 回答