文章目录
- junit测试实例
- 1 创建测试项目
- 1.1 创建java project
- 1.2创建测试类
- 2 编写测试脚本
- 3 执行测试脚本
- 3.1 测试通过情况
- 3.2测试失败情况
- 4 Errors与Failures的区别
- 5 JUnit中 常用的注解
- 6 测试断言
- 6.1 Assert类的方法
- 7 Junit中的异常处理
- 7.1 try/ catch/ finally
- 7.2 ExpectedException
- 8 代码覆盖率
junit测试实例
现在的eclipse中已经集成了junit,可以直接创建JUnit项目
1 创建测试项目
1.1 创建java project
创建一个java project
,然后在src目录下创建自己的方法类Calculator.java
。
1.2创建测试类
右击JUnitTest
项目名,File–>new–>Other–>Java–>JUnit–JUnit Test Case,创建测试类CalculatorTest.java
2 编写测试脚本
package test;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.DynamicContainer.*;
import static org.junit.jupiter.api.DynamicTest.*;
import java.util.stream.Stream;
import org.junit.jupiter.api.DynamicNode;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
class CalculatorTest {
@Test
void testAdd() {
assertEquals(6, new Calculator().add(3, 3));
// fail("Not yet implemented");
}
@Test
void testSubtraction() {
assertEquals(1, new Calculator().subtraction(4, 3));
// fail("Not yet implemented");
}
@Test
void testMultiplication() {
assertEquals(12, new Calculator().multiplication(3, 4));
// fail("Not yet implemented");
}
@Test
void testDivision() {
assertEquals(2, new Calculator().division(6,3));
// fail("Not yet implemented");
}
使用新的test_jupiter模板创建一个JUnit Jupiter测试方法:
// @Test
// void testName() throws Exception {
//
// }
//
@TestFactory使用新的test_factory模板创建一个方法
// @TestFactory
// Stream<DynamicNode> testFactoryName() throws Exception {
// // TODO: generate dynamic test cases
// return null;
// }
}
3 执行测试脚本
跟运行一般的java类一样,右击鼠标,Run As--->1JUnit Test
3.1 测试通过情况
3.2测试失败情况
测试方法:
运行结果:
4 Errors与Failures的区别
- 失败:由于测试用例断言语句中的条件未能得到满足所引发,
意味着程序运行状态或运行结果与预期不一致
,是主动控制的,可以主观上进行相应修改,使得Failure得到解决。 - 错误:由于源程序或测试程序中的代码异常所引发,表示
程序
在测试用例运行时产生了导致系统崩溃的、意想不到的错误状态
,是预期之外产生的。
5 JUnit中 常用的注解
@BeforeClass、@AfterClass、@Before、@After、@Test、@lgnore等,他们规定了每个测试用例的运行次序,即@BeforeClass--->@Before--->@Test--->@After--->@AfterClass
从而确定了整个测试流程。
-
@BeforeClass
所注解的方法是JUnit测试时首个被运行的方法,且只被运行一次
。@BeforeClass
所注解的方法必须是static void
类型,通常会涉及复杂的计算和预处理任务,如连接数据库等。 @AfterClass
所注解的方法是JUnit测试时最后一个被运行的方法,且只被运行一次
@AftcrClass所注解的方法必须是
static void``类型,通常会涉及资源释放相关任务,如关闭数据库等。@Before
所注解的方法在每个测试用例运行之前运行,通用用于初始化测试用例所需的资源
。@After
所注解的方法在每个测试用例运行之后运行,通用用于释放@Before所注解的方法打开的资源
。
- 需要注意的是,当@Test或@Before所注解的方法发生异常时,
@After
所注解的方法仍会被运行。
@Test
所注解的方法被称为测试用例,包含了源程序的测试代码。@Test
注解包含expected和timeout两个可选参数。
- expected表示测试用例运行后应该抛出的异常;
- timeout表示测试方法的运行时间。为避免程序测试时陷入死循环或运行时间过长,可以通过timeout来限制测试用例运行时间
@lgnore
所注解的方法在测试过程中不会运行。
注意:
@Before
和@After
有几个方法就执行几遍,@AfterClass
和@BeforeClass
只执行一遍。@timeout
的单位是毫秒,如果你写@timeout=4000的话,这个测试用例最多可以运行4s。
6 测试断言
检查并判断程序的运行结果是软件测试中的一项重要工作。在测试前测试者通常会在程序中埋入一些断言条件,若程序运行时不能满足这些条件,则表明程序的运行状态(或运行结果)与期望不一致,程序中存在缺陷。
JUnit通过Assert类 提供了一系列断言方法来帮助测试者判断程序的运行结果。一般的,断言方法中的参数包括期望变量var expecrea
和实际变量var aetua
两个部分。在断言语句运行时,若var expected
与var acra
的值相等,则表明程序运行结果与期望相符;否则,若var espeeted
与``var actua的值不相等,则表明程序运行结果与期望相异,测试用例运行失败。
6.1 Assert类的方法
注意:第四个方法中的
delta
代表两个参数的误差,在指定的误差之内,两个double类型的变量都视为一致。
7 Junit中的异常处理
7.1 try/ catch/ finally
- 开发者在Java编程时会对程序中的异常情况进行处理。一般的,可以再发生异常的方法内添加try/ catch/ finally 等处理语句,将异常在方法内部解决,也可以通过使用throw/throws等语句交由方法上一层进行解决。
7.2 ExpectedException
- JUnit中的ExpectedException可以更精确地定位异常发生位置。在应用ExpectedException类前,需要用@Rule注解声明ExpectedException异常。然后,在异常发生位置前调用expect方法检测异常。此外,还可使用ExpectedException中的expectMessage方法设置异常属性信息。
- Exception类前,需要用@Rule注解声明ExpectedException异常。然后,在异常发生位置前调用expect方法检测异常。此外,还可使用ExpectedException中的expectMessage方法设置异常属性信息。
8 代码覆盖率
代码行颜色
绿色:代码被执行过
黄色:代码部分被执行过
红色:代码没有被执行过
钻石符号:
绿色:完全执行的决策分支
黄色:部分执行的决策分支
红色:某行没有执行过的决策分支