maven倡导约定优于配置,而maven的约定目录结构为:
src/main/java 下存放java类
src/main/webapp 下存放页面文件(需要手动创建)
src/main/resources 下存放资源文件
src/test/java 下存放单元测试代码
src/test/resources 下存放测试资源文件
maven运行的生命周期为:
复制src/main/resources资源文件到输出目录
编译src/main/java下的源代码
复制src/test/resources下的测试用资源文件到测试输出目录
编译src/test/java下的测试用例
运行测试用例
打包生成
默认情况下,maven集成了maven-surefire-plugin插件,该插件会去查找src/test/java下所有包含Test的类作为测试类,测试类会去src/test/resources下查找测试资源。我们只需在测试方法上使用@Test注解,那么测试就顺理成章了。但是spring junit测试时,经常出现注解未扫描到注解的情况,例如:
package com.student.system.service.user;
import javax.annotation.Resource;
import org.junit.Test;
import com.student.system.entity.user.TUser;
public class TestUserService {
@Resource
private UserService userService;
@Test
public void findUserById(){
TUser user =userService.findUserById("123");
System.out.println(user.toString());
}
}
会出现空指针异常,具体原因我也未找到,如果有人知道请留言告诉我。我将测试资源是放在了src/test/resources下的。
我们可以使用spring-junit包来提供对配置文件的支持来弥补上面的缺陷,这样就不需要在src/test/resources下再存放资源文件了。使用这种方法需要如下步骤:
1.使用@RunWith注解来实现SpringJUnit4ClassRunner.class来替换junit默认的执行类Suite。
@RunWith(SpringJUnit4ClassRunner.class)
2.指定Spring配置文件的位置
@ContextConfiguration(locations={“classpath:applicationContext.xml”,“classpath:applicationContext-security.xml”,”file:src/main/webapp/WEB-INF/servlet.xml”})
这里提供了2中路径的写法,一种是classpath,这种方式是去src/main/resources下查找资源文件。另一种file:是从项目根目录下查找指定的路径文件。
例如:
package com.student.system.service.user;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.student.system.entity.user.TUser;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class TestUserService {
@Resource
private UserService userService;
@Test
public void findUserById(){
TUser user =userService.findUserById("123");
System.out.println(user.toString());
}
}