MVC测试控制器ClassNotFoundException

时间:2013-07-30 12:51:49

标签: java spring spring-mvc mockito

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

总结:

我使用Maven 3.0.4。

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

  • 共同
  • webservices(使用common和dao)

在webservices中,我有一个Controller

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: 引起:java.lang.ClassNotFoundException:com.lalala.WebServicesController。有人能告诉我配置和测试有什么问题吗?

(除此之外,该项目在tomcat中部署后工作正常,只是为了知道我是否编写了错误的测试,我尝试启动现有的测试,这些测试完全适用于jenkins。它们不能在本地工作。)

3 个答案:

答案 0 :(得分:0)

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

属性&gt;部署组装&gt;从构建路径添加库

答案 1 :(得分:0)

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

  • 首先找出存在有问题的类文件的jar文件。如果您不知道如何找到特定类的jar文件,您可以看到eclipse快捷方式,或者您只需在Eclipse中执行“Ctrl + T”并键入类的名称,它将列出所有jar中的命令它们出现在eclipse类路径中。

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

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

答案 2 :(得分:0)

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

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

mvn eclipse:eclipse 

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

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

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

选中后,执行'项目|清理'在Eclipse中