Junit概述
JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量。
JUnit 测试框架具有以下特点:
- JUnit是用于编写和运行测试的开源框架。
- 提供了注释,以确定测试方法。
- 提供断言测试预期结果。
- 提供了测试运行的运行测试。
- JUnit测试让您可以更快地编写代码,提高质量
- JUnit是优雅简洁。它是不那么复杂以及不需要花费太多的时间。
- JUnit测试可以自动运行,检查自己的结果,并提供即时反馈。没有必要通过测试结果报告来手动梳理。
- JUnit测试可以组织成测试套件包含测试案例,甚至其他测试套件。
- Junit显示测试进度的,如果测试是没有问题条形是绿色的,测试失败则会变成红色。
Junit maven配置
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
注:maven项目通常在test下编写测试类
Junit断言
void assertEquals([String message], expected value, actual value)
:断言两个值相等。有多种参数类型重载,第一个参数是一个可选的字符串消息void assertTrue([String message], boolean condition)
:断言一个条件为真void assertFalse([String message],boolean condition)
:断言一个条件为假void assertNotNull([String message], java.lang.Object object)
:断言一个对象不为空(null)void assertNull([String message], java.lang.Object object)
:断言一个对象为空(null)void assertSame([String message], java.lang.Object expected, java.lang.Object actual)
:断言,两个对象引用相同的对象void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual)
:断言,两个对象不是引用同一个对象void assertArrayEquals([String message], expectedArray, resultArray)
:断言预期数组和结果数组相等。有多种参数类型重载。
Junit注解
注解 | 描述 |
---|---|
@Test public void method() |
Test注释指示该公共无效方法它所附着可以作为一个测试用例。 |
@Before public void method() |
Before注释表示,该方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件。 |
@BeforeClass public static void method() |
BeforeClass注释指出这是附着在静态方法必须执行一次并在类的所有测试之前。发生这种情况时一般是测试计算共享配置方法(如连接到数据库)。 |
@After public void method() |
After 注释指示,该方法在执行每项测试后执行(如执行每一个测试后重置某些变量,删除临时变量等) |
@AfterClass public static void method() |
当需要执行所有的测试在JUnit测试用例类后执行,AfterClass注解可以使用以清理建立方法,(从数据库如断开连接)。注意:附有此批注(类似于BeforeClass)的方法必须定义为静态。 |
@Ignore public static void method() |
当想暂时禁用特定的测试执行可以使用忽略注释。每个被注解为@Ignore的方法将不被执行。 |
代码示例:
import org.junit.*;
public class CalculatorTest {
int a = 3;
int b = 5;
int expectAdd = 8;
int expectSub = -2;
Calculator calculator = new Calculator();
@BeforeClass
public static void beforeClass(){
System.out.println("@BeforeClass");
}
@Test
public void addTest(){
int res = calculator.add(a,b);
System.out.println("add("+a+","+b+")="+res);
Assert.assertEquals(res,expectAdd);
}
@Test
public void subTest(){
int res = calculator.sub(a,b);
System.out.println("sub("+a+","+b+")="+res);
Assert.assertEquals(res,expectSub);
}
@AfterClass
public static void onceExecutedAfterAll() {
System.out.println("@AfterClass");
}
@After
public void executedAfterEach() {
System.out.println("@After");
}
}
创建套件测试
测试套件是一些测试不同类用例,可以使用@RunWith
和@Suite
注解运行所有东西在一起。如果有很多测试类,想让它们都运行在同一时间,而不是单一地运行每个测试,这是非常有用的。
下面这段代码即同时测试TestCase1和TestCase2
package junit;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({TestCase1.class,TestCase2.class})
public class TestSuite {
}
构建参数化测试
满足下列要求:
- 该类被注解为
@RunWith(Parameterized.class)
. - 这个类有一个构造函数,存储测试数据。
- 这个类有一个静态方法生成并返回测试数据,并注明
@Parameters
注解。 - 这个类有一个测试,它需要注解
@Test
到方法。
代码示例:
@RunWith(Parameterized.class)
public class CalculatorTest2 {
int oper1;
int oper2;
int expectAdd;
int expectSub;
Calculator calculator = new Calculator();
public CalculatorTest2(int oper1, int oper2, int expectAdd,int expectSub) {
this.oper1 = oper1;
this.oper2 = oper2;
this.expectAdd = expectAdd;
this.expectSub = expectSub;
}
@Parameterized.Parameters
public static Collection addedNumbers(){
return Arrays.asList(new Integer[][]{{1,2,3,-1},{4,2,6,2},{7,3,10,10},{5,2,1,3}});
}
@Test
public void addTest(){
int res = calculator.add(oper1,oper2);
System.out.println("add("+oper1+","+oper2+")="+res);
Assert.assertEquals(res,expectAdd);
}
@Test
public void subTest(){
int res = calculator.sub(oper1,oper2);
System.out.println("sub("+oper1+","+oper2+")="+res);
Assert.assertEquals(res,expectSub);
}
}
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/junit-%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95%e5%b0%8f%e5%b7%a5%e5%85%b7/