Maven管理的Spring Web项目集成JUnit单元测试
JUnit是一套优秀的单元测试框架,而Maven是优秀的Java项目构建和管理工具,两者结合可以很方便地对项目进行自动化测试。
一般的简单Java应用就不多说了,一些框架会提供针对junit的扩展,使得测试变得更容易,例如Spring官方就提供了spring-test,用于提供获取ApplicationContext等方面的支持。
首先要做的是,改变JUnit的实际执行类,将默认的执行类Suite替换为Spring提供的SpringJUnit4ClassRunner,也就是在测试类前面加上一个注解:
InputStream is = null; if(null != context){ is= context.getResourceAsStream("/WEB-INF/configs/command-sender.xml"); }else{//JUnit Test环境下,使用ApplicationContext获取配置文件 //NearEast 2013-10-22 try { is= SpringContextHolder.getApplicationContext(). getResource("file:src/main/webapp/WEB-INF/configs/command-sender.xml").getInputStream(); }catch(IOException e) { e.printStackTrace(); } }
其中,SpringContextHolder是笔者在《在Java Web应用中获取Spring管理的Bean的方法》提到的一个工具类,SpringContextHolder.getApplicationContext()即获得Spring的ApplicationContext。资源的路径使用了上文提到的完全限定路径,我们也可以将其写为类似“file:E:/Workspaces/workspace_test/test/src/main/webapp/WEB-INF/configs/command-sender.xml"”的形式。经过上述修改之后,我们的业务类也可以直接利用JUnit执行测试了。
当然我们还可以用其它方式获取ApplicationContext,例如让业务类实现ApplicationContextAware接口,并使用一个变量保存ApplicationContext。