JUnit单元测试
测试分类:
- 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
- 白盒测试:需要写代码的。关注程序具体的执行流程。
一、环境配置
- 导入依赖环境
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
二、基本用法
- 测试代码和生成代码分开放置,Maven默认目录正好符号这个要求。
- Junit使用:白盒测试
步骤:
1. 定义一个测试类(测试用例)
建议:
测试类名:被测试的类名Test CalculatorTest
包名:xxx.xxx.xx.test com.practice.test
2. 定义测试方法:可以独立运行
建议:
方法名:test测试的方法名 testAdd()
返回值:void
参数列表:空参
3. 给方法加@Test
三、使用案例
被测试代码放在main下的java目录中,junit测试代码放在test下的java目录中,形成一一对应关系,测试代码使用Test开头命名。
被测试Calculator代码:
package com.practice.junit;
/**
* 计算器类
*/
public class Calculator {
/**
* 加法
* @param a
* @param b
* @return
*/
public int add (int a , int b){
//int i = 3/0;
return a - b;
}
/**
* 减法
* @param a
* @param b
* @return
*/
public int sub (int a , int b){
return a - b;
}
}
测试CalculatorTest代码
package com.practice.test;
import com.practice.junit.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class CalculatorTest {
/**
* 初始化方法:
* 用于资源申请,所有测试方法在执行之前都会先执行该方法
*/
@Before
public void init(){
System.out.println("init...");
}
/**
* 释放资源方法:
* 在所有测试方法执行完后,都会自动执行该方法
*/
@After
public void close(){
System.out.println("close...");
}
/**
* 测试add方法
*/
@Test
public void testAdd(){
//1.创建计算器对象
System.out.println("testAdd...");
Calculator c = new Calculator();
//2.调用add方法
int result = c.add(1, 2);
//System.out.println(result);
//3.断言 断言测试结果是3,与实际测试结果比较
Assert.assertEquals(3,result);
}
@Test
public void testSub(){
//1.创建计算器对象
Calculator c = new Calculator();
int result = c.sub(1, 2);
System.out.println("testSub....");
Assert.assertEquals(-1,result);
}
}
四、补充内容
JUnit 注解
@Test: 这个注释说明依附在 JUnit 的 public void 方法可以作为一个测试案例。
@Before: 有些测试在运行前需要创造几个相似的对象。在 public void 方法加该注释是因为该方法需要在 test 方法前运行。
@After: 如果你将外部资源在 Before 方法中分配,那么你需要在测试运行后释放他们。在 public void 方法加该注释是因为该方法需要在 test 方法后运行。
@BeforeClass: 在 public void 方法加该注释是因为该方法需要在类中所有方法前运行。
@AfterClass: 被注解的这个方法在所有测试结束后执行。这个注解可以用来进行清理活动。
@Ignore: 这个注释是用来忽略有关不需要执行的测试的。
JUnit 加注解执行过程
beforeClass(): 方法首先执行,并且只执行一次。
afterClass(): 方法最后执行,并且只执行一次。
before(): 方法针对每一个测试用例执行,但是是在执行测试用例之前。
after(): 方法针对每一个测试用例执行,但是是在执行测试用例之后。
*注:在 before() 方法和 after() 方法之间,执行测试用例。
JUnit 断言
Junit所有的断言都包含在 Assert 类中。
这个类提供了很多有用的断言方法来编写测试用例。只有失败的断言才会被记录。Assert 类中的一些有用的方法列式如下:
void assertEquals(boolean expected, boolean actual)
检查两个变量或者等式是否平衡
void assertTrue(boolean expected, boolean actual)
检查条件为真
void assertFalse(boolean condition)
检查条件为假
void assertNotNull(Object object)
检查对象不为空
void assertNull(Object object)
检查对象为空
void assertSame(boolean condition)
assertSame() 方法检查两个相关对象是否指向同一个对象
void assertNotSame(boolean condition)
assertNotSame() 方法检查两个相关对象是否不指向同一个对象
void assertArrayEquals(expectedArray, resultArray)
assertArrayEquals() 方法检查两个数组是否相等
JUnit 时间测试
如果一个测试用例比起指定的毫秒数花费了更多的时间,那么 Junit 将自动将它标记为失败。timeout参数和 @Test 注解一起使用。
@Test(timeout=1000) //时间单位为毫秒
Record Our Mind

浙公网安备 33010602011771号