2014-03-13 57 views
0

好吧,我来自Rails,在尝试使这个工作有点困难。Spring MVC测试没有嘲讽

权利知道这是我从Spring框架理解(并请纠正我,如果我错了):

  1. 我使用Tomcat。所以它基本上是在web.xml之后,并检查从那里的任何配置文件,以初始化和获取豆自动有线等。

  2. 在我的例子中,我有关于web.xml的上下文配置位置的应用-config.xml中

  3. 事实证明,应用-config.xml中具有其他配置文件,将采取以下护理:

休眠:

<util:properties id="hibernatePropertiesConfigurer" location="classpath:hibernate.properties"/> 

JSON转换器:

<import resource="classpath:json-converter.xml"/> 

经理(@Component)扫描仪:

<import resource="classpath:scanner-config.xml"/> 

等等。换句话说,这些工作就好了,web服务器起床,经理(@Components)为@Autowired@Controllers可以给他们打电话,数据库中的对象持久等

现在,我想测试,即运行JUnit测试。我确实发现了很多关于如何嘲笑这些层(经理,控制器)的例子,但我想尝试真实的东西:

  • 测试将实例@Controller
  • 测试将张贴到@Controller对象
  • @Controller将有@Component@Bean
  • @Component真正@Autowired(轻慢不得版)将持续一个@Entity
  • 而且,最重要的是,d atabase应该看到变化。 (我正在使用MySQL)
  • 然后,测试将使用@Component@Autowired实例,并查询数据库以确认发生持久性。

这是可能的,完全可以通过Spring,JUnit测试吗?

+1

在Spring 3.2中,查看'MockMvc'和整个MVC测试堆栈。 –

+0

不幸的是我被Spring 3.1卡住了。然而,我看了这个:https://github.com/spring-projects/spring-mvc-showcase.git,虽然它非常有用,但我想不嘲笑地尝试。换句话说,我想要在测试中拥有与Web相同的应用程序上下文 – marcelorocks

+0

有一个与3.1一起工作的“MockMvc”预览版:https://github.com/spring-projects/spring-test-mvc 。也许它仍然(但你真的需要升级)? –

回答

0

如果你想验证整个堆栈的行为,它不再是一个单元测试,而是一个集成测试。

如果您使用的是Maven,您可以在pre-integration-test阶段使用类似Maven Jetty插件的方式将您的项目部署到嵌入式容器中。然后在你的测试中,在本地主机上对服务器进行HTTP调用,并验证你得到了预期的响应。然后,在post-integration-test阶段,关闭Jetty服务器。

+0

这是否意味着即使我不想测试控制器,而是单独使用持久层,我仍然需要得到类似的东西,以便能够在我的数据库上真实存储?那么数据库预定义的数据(夹具)呢?这是否也照顾到了这一点? – marcelorocks

+0

不确定数据库设备的含义。所有这些都是将你的webapp从头开始部署到一个容器中,这样你就可以像对待客户一样运行HTTP请求。如果你正在测试单独的类,那么如果没有MockMVC框架,你可能不会运气。 –