JAVA单元测试注解详解及代码演示
JAVA单元测试注解详解及代码演示
单元测试能不通过main方法运行我们想要运行的方法,所以用于测试某段代码的时候会很方便。
先假设一个简单的类
实现加法和除法两个方法
public class Demo {
public int add(int a ,int b){
return a + b ;
}
public int devide(int a ,int b){
try {
Thread.sleep(105) ;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return a / b ;
}
}
下面在另一个类类面开始单元测试
在进行单元测试的时候要引入org.junit.jupiter.api.Test或者org.junit.Test两者都可以进行单元测试,但是版本不同,有些地方或许会不兼容
下面以org.junit.Test为例子做单元测试
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/** * 测试方法的写法: * 1. 方法必须是公有的 * 2. 方法返回值必须是void * 3. 方法必须是无参 * 4. 必须加@Test注解 * * @before :是每个测试方法执行之前都必须要调用一次此方法 * @beforeclass: 是所有测试方法执行之前都必须要调用一次此方法(只会调用一次) * * @after: * @afterclass: * @author Administrator * */
public class DemoTest {
static Demo d ;
// @Before
// public void before(){
// System.out.println("我先执行了");
// d = new Demo() ;
// }
@BeforeClass
public static void beforeclass(){
System.out.println("我是静态的方法");
d = new Demo() ;
}
@Test
public void testAdd(){
// demo() ;
Assert.assertEquals(10, d.add(4, 6)) ;
}
@Test(timeout=100)
public void testDevide(){
//demo() ;
Assert.assertEquals(2, d.devide(10, 2)) ;
}
// public void demo(){
// //System.out.println("啊啊啊啊啊啊啊啊啊");
// d = new Demo() ;
// }
@After
public void after(){
System.out.println("我执行完了");
}
}
在eclipse中运行没有出错的情况
运行结果如下
在eclipse中运行出错的情况
把断言里面的10改成8,断言就会报错,单元测试的运行结果也会变成红色。
运行超时的情况
单元测试testDevide()方法时,使用@Test(timeout=100)可以设定运行时间时100ms,如果超时单元测试就会报错。这样可以测试方法的时间复杂度,为后续优化提供帮助。