java单元测试是最小的功能单元测试代码, 单元测试就是针对单个java方法的测试。相比较于main方法进行测试,main方法会把测试代码和业务代码耦合在一起。并且JUnit单元测试可以设置期望值。
Jar依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
断言
断言的使用, 必须先引入必须的包
import static org.junit.Assert.*;
测试用例
@Slf4j
public class TestDemo1 {
Val val = null;
/**
* 初始化非常耗时的资源, 例如创建数据库
*/
@BeforeClass
public static void beforeClass() {
log.info("-->beforeClass");
}
/**
* 单元测试执行之前执行,用于初始化测试资源
*/
@Before
public void before() {
log.info("-->before");
val = new Val();
}
/**
* timeout设置超时时间
*/
@Test(timeout = 300)
public void test1() {
log.info("单元测试1");
Long result = val.parse("123");
Assert.assertEquals(new Long(123), result);
}
/**
* 期望出现异常NumberFormatException,没有异常则用户不通过
*/
@Test(expected = NumberFormatException.class)
public void test2() {
log.info("单元测试2");
Long result = val.parse("a");
Assert.assertEquals(new Long(123), result);
}
/**
* 单元测试执行完毕后执行,用于关于测试资源
*/
@After
public void after() {
log.info("-->after");
}
/**
* 清理@BeforeClass创建的资源, 例如创建数据库
*/
@AfterClass
public static void AfterClass() {
log.info("-->AfterClass");
}
}
结果:
[ main]-->beforeClass
[ main]-->before
[ main]单元测试1
[ main]-->after
[ main]-->before
[ main]单元测试2
[ main]-->after
[ main]-->AfterClass
断言的常用方法:(org.junit.Assert)
assertEquals(100, x): 断言相等
assertArrayEquals({1, 2, 3}, x): 断言数组相等
assertEquals(3.1416, x, 0.0001): 浮点数组断言相等
assertNull(x): 断言为null
assertTrue(x > 0): 断言为true
assertFalse(x < 0): 断言为false;
assertNotEquals(): 断言不相等
assertNotNull(): 断言不为null
异常测试
异常测试可以通过@Test(expected=Exception.class), 对可能发生的每种类型的异常进行测试
如果抛出了指定类型的异常, 测试成功
如果没有抛出指定类型的异常, 或者抛出的异常类型不对, 测试失败
@Before和@After
在@Before方法中初始化测试资源
在@After方法中释放测试资源
@BeforeClass: 初始化非常耗时的资源, 例如创建数据库,需要static方法
@AfterClass: 清理@BeforeClass创建的资源, 例如创建数据库,需要static方法。
参数化测试
@RunWith: 当类被@RunWith注释修饰, 或者类继承了一个被该注解类修饰的类, JUnit将会使用这个注解所指明的运行器(runner)来运行测试, 而不是JUni默认的运行器。如SpringBoot的单元测试:@RunWith(SpringRunner.class)
超时测试
@Test(timeout=1000)可以设置超时时间
网友评论