Junit单元测试
- 测试分类
- 黑盒测试:输入输出,不关心代码细节。不需要写代码,只需输入看输出是否合适
- 白盒测试:关心代码细节,执行流程。需要写代码
Junit使用:
-
步骤
1、定义一个测试类
- 包名com.mytest.test
- 建议类名CalculatorTest
2、定义测试方法:可以独立运行
- 建议方法名:testAdd()
- 返回值 void
- 参数列表,建议空参
3、给方法加注解@Test
计算类
public class Calculator(){
public int add(int a,int b){
return a+b;
}
public int sub(int a,int b){
return a-b;
}
}
测试类:com.mytest.test
import org.junit.Test;
public class CalculatorTest(){
@Test
public void testAdd(){
Calculator c = new Calculator();
int result = c.add(1,2);
//程序有没有异常可测,但是程序逻辑检测不出来。所以采用断言这个工具来
//System.out.println(result);
//断言,这个结果是3
Assert.assertEquals(3,result);//(期望的结果,运行的结果)
}
}
-
测试时的重复操作
-
初始化方法:用于资源申请,所有测试方法在执行之前都会执行该方法
@Before public void init(){ System.out.println("初始化公共资源等"); }
-
释放资源方法:在所有测试方法执行后,都会自动执行该方法
@After public void close(){ System.out.println("释放资源") }
-
Spring集成Junit
原始Junit测试Spring的问题
在测试类中,每个测试方法中都需要创建spring容器,获取容器中的对象,都有以下两行代码:
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IAccountService as = ac.getBean("accountService",IAccountService.class);
这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。
•让SpringJunit负责创建Spring容器,但是需要将配置文件的名称告诉它
•将需要进行测试Bean直接在测试类中进行注入(将需要
步骤
-
①导入spring集成Junit的坐标
<!--此处需要注意的是,spring5 及以上版本要求 junit 的版本必须是 4.12 及以上--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
-
②使用@Runwith注解替换原来的运行期
@RunWith(SpringJUnit4ClassRunner.class) public class SpringJunitTest { }
-
③使用@ContextConfiguration指定配置文件或配置类
@RunWith(SpringJUnit4ClassRunner.class) //加载spring核心配置文件 //@ContextConfiguration(value = {"classpath:applicationContext.xml"}) //加载spring核心配置类 @ContextConfiguration(classes = {SpringConfiguration.class}) public class SpringJunitTest { }
-
④使用@Autowired注入需要测试的对象
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {SpringConfiguration.class}) public class SpringJunitTest { @Autowired private UserService userService; }
-
⑤创建测试方法进行测试
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {SpringConfiguration.class}) public class SpringJunitTest { @Autowired private UserService userService; @Test public void testUserService(){ userService.save(); } }