springMvc 使用junit测试
这两天在研究使用junit进行代码功能测试,开发工具:intellij idea,就遇到的问题进行分享,、
一、基本的使用
第一步
在Maven中加入Junit jar的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
第二步
在main目录下新建test文件夹如图,这时候你是不能在test文件夹下新建Java文件的.
test文件夹建好之后右击test文件夹如下如图找到MarkDirectory as–>Test Resources Root
当上述操作完成后你可以在test文件夹下新建Java文件
第三步
在test目录下新建Java文件,类名自取,比如我取了Test.如下图@Test注解可以使用
然后执行:
以上是个简单的步骤。
可以还有深层次的问题进行研究。
首先,资源的读取,
如果资源在resource下,那么引入的方式:
@ContextConfiguration(locations="classpath:ApplicationContext.xml")
如果在webapp下如何引用呢?
@ContextConfiguration({"file:src/main/webapp/WEB-INF/applicationContext.xml"})
如果想测试和正式分的更彻底一些,把资源文件放在test目录下,怎么操作呢,
比如创建一个目录名字叫resource,那么我们怎么使用呢,可以做如下的操作:
然后如何使用呢:
@ContextConfiguration(locations = {"/WEB-INF/conf/applicationContext.xml"})
为了更方便的进行测试,可能需要把所有的service等文件进行注入,这过程中可能会遇到一些bug, 下面我们来一一排除。
问题一。
ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method.
解决方案:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring instrumentation end-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<forkMode>once</forkMode>
<argLine>
-javaagent:${settings.localRepository}/org/springframework/spring-instrument/3.2.6.RELEASE/spring-instrument-3.2.6.RELEASE.jar
-javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/1.8.0/aspectjweaver-1.8.0.jar
</argLine>
</configuration>
</plugin>
问题二、使用junit测试springMVC项目提示ServletContext找不到定义错误
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.servlet.ServletContext] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
解决方案:
其实提示很清楚就是找不到注入javax.servlet.ServletContext 的实例,明显就是没有web容器环境
解决办法就是配置web容器配置
为类添加注解 @WebAppConfiguration 即可
这样测试就可以正常进行了