编写被测文件
package junit;
public class Calculate {
public int add(int a, int b) {
return a + b;
}
public int substract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
}
编写测试代码
package junit;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Calculate 测试文件
*
*/
public class CalculateTest {
private Calculate calculate;
/**
* 在每个方法执行前执行
* @throws Exception
*/
@Before
public void setUp() throws Exception {
// 构建对象
calculate=new Calculate();
}
/**
* 在每个方法执行后执行
* @throws Exception
*/
@After
public void tearDown() throws Exception {
}
/**
* 测试规范点:
* 1、测试方法必须使用@Test注解,并且方法必须是public void,不能带任何参数;
* 2、测试单元中的每个方法必须可以独立,测试方法之间不能有任何的依赖;
* 3、测试方法一般使用test作为方法名的前缀
*/
@Test
public void testAdd() {
//调用所需要测试的函数
//真实值
int result=calculate.add(10, 20);
//期望值
int expect=30;
//断言
//此处 0 代表的是误差值,当expect与result相差的绝对值小于这个值时测试通过。但大于等于时会失败。
assertEquals(expect, result, 0);
}
@Test
public void testSubstract() {
// 调用被测函数
int result=calculate.substract(10, 5);
// 断言
assertEquals(5, result);
}
@Test
public void testMultiply() {
int result = calculate.multiply(2, 3);
assertEquals(6, result);
}
@Test
public void testDivide() {
int result = calculate.divide(10, 3);
assertEquals(3, result, 0);
}
}
相关注解的说明
@RunWith
这个注解修饰的是测试类,作用在类上表示该测试类所使用的测试驱动。@Test
这个注解表明被修饰的方法是测试方法,在Junit中将会被自动执行,需要注意的是,测试方法只能是无返回值无参数的公共方法,即public void 。方法名可以任意取(建议是跟被测试方法同名),方法不能有入参。当然@Test 注解内还能传入一些参数,例如:@Test(expected = ArithmeticException.class) 就是预期被测试的方法会抛出ArithmeticException异常,可以理解为异常捕获。还可以传入超时时间,比如 @Test(timeout = 100):我们给测试函数设定一个执行时间,超过了这个时间(100毫秒),它们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。@BeforeClass
这个注解针对所有测试,在所有测试方法执行之前执行,且只执行一次,且必须是作用在public static void,即修饰静态方法。@AfterClass
这个注解针对所有的测试,将会在所有测试方法执行结束后执行一次,且必须作用到public static void。@Before
初始化方法,每个测试方法运行之前必须执行被@Before注解修饰的方法。@After
释放资源,在任何测试方法执行之后需要进行的收尾工作,在每个测试方案执行之后执行一次,该注解作用到public static void。@Ignore
忽略的测试方法,标注的含义就是"某些方法尚未完成,暂不参与此次测试",被@Ignore注解修饰的方法不会被执行。
断言
一个完整的单元测试有三个步骤:
准备(测试环境,准备测试数据)
执行(构造请求传入参数执行)
断言(验证结果)
前面介绍完了准备和执行两个步骤,下面就是介绍断言这个步骤了,Junit测试框架中Assert类就是实现断言的工具,Assert类中用于断言的方法有很多,下面介绍几个常用的断言方法。
assertEquals(expected, actual)
查看两个对象或者两个值是否相等,如果是对象的话就是使用equal()方法来比较。参数expected为用户期望的值,actual为被测试方法实际返回的值。如果这两个值相等的话, 则说明方法运行是正确的。assertNull()
查看对象是否为空。assertSame(expected,actual)
查看两个对象的引用是否相等,直接用==来进行比较的。比较两个对象的值是否相等。assertTrue(String message, boolean condition)
要求condition==true,查看运行的结果是否为true。