几乎全是基于JUnit4的,毕竟idea里面默认就是JUnit4,要是有基于JUnit5的会额外标出
框架介绍
1. 是一个开源的java语言单元测试框架
2. 特点:使用断言(Assertion)测试期望结果,方便组织运行测试,查看测试结果,集成到Maven
设计
Testcase:一个testcase表示一个测试
TestSuite:一个TestSuite包含一组TestCase,表示一组测试
TestFixture:一个TestFixture表示一个测试环境
TestResult:用于收集测试结果
TestRunner:用于运行测试
TestListener:用于监听测试过程,手机测试数据
Assert:用于断言测试结果是否正确
基本操作
testcase的每个测试方法必须完全独立!
一般步骤
黑盒:不需要写代码,给输入值,看程序是否能够输出期望的值
白盒:需要写代码,关注程序具体的执行流程
step1.定义一个测试类(测试用例)
tips:测试类名:被测试类名Test 包名:xxx.xxx.xx.test
step2.定义测试方法:可以独立运行
tips:方法名:test测试的方法名 返回值:void 参数列表:空参
step3:给方法加@Test
step4: 导入JUnit依赖环境
import org.junit.Test;
//其实加@Test的时候会报红直接点小灯泡选Junit4就行()
step5:判定
红:失败;绿:成功;断言:Assert.assertEquals()判定是否为目标值(后面详细解释断言)
Assert 断言
assertEquals(Object expected, Object actual); // 用于比较两个对象的值是否相等,即它们在逻辑上是否相等
assertEquals(double expected, double actual, double delta); // 浮点数相等
assertArrayEquals(Object[] expected, Object[] actual); // 数组相等
assertSame(Object expected, Object actual); // 用于比较两个对象是否是同一个对象,即它们在内存中的引用是否相同。
assertNull(Object object); // null
assertTrue(boolean condition); // true
assertFalse(boolean condition); // false
assertThrows(Class<? extends Throwable> expectedType, Executable executable); // 用于测试某个代码块是否会抛出预期的异常。接受两个参数:预期的异常类型和要执行的代码块。如果执行的代码块确实抛出了预期的异常,则断言通过;否则,测试将失败。
assertNotEquals(Object unexpected, Object actual); // 不相等断言
assertNotNull(Object object); // 非null断言
初始化/释放资源
普通方法
@Before 用于资源申请,初始化测试对象,测试对象以实例变量存放 在每个@Test方法前执行
@After 在每个@Test方法后执行,销毁@before创建的测试对象
静态方法
@BeforeClass 在所有@Test方法前执行,初始化非常耗时的资源,以静态变量存放 e.g创建数据库
@AfterClass 在所有@Test方法后执行
*@BeforeClass 静态初始化的对象只能存放在静态字段中,静态字段的状态会影响到所有的@Test
异常测试
try-catch可以,但是很麻烦,不如↓
@Test(expected = Exception.class)
抛出符合要求的异常就可以通过,否则不通过
超时测试
可以为JUnit的单个测试设置超时(单位为毫秒):
e,g 超时设置为1秒:@Test(timeout =1000)
***不能取代性能测试和压力测试
参数化测试
1.参数化测试:如果待测试的输入和输出是一组数据
- 可以把测试数据组织起来;
- 用不同的测试数据调用相同的测试方法。
2、参数化测试要求
-参数必须有静态方法 data(返回,返回类型为 Collection<?>,静态方法必须标记为@Parameters;
-测试类必须标记为: @RunWith(Parameterized.class);
-构造方法参数必须和测试参数对应
提高可读性
@DisplayName 用于为测试类或测试方法提供自定义的显示名称*JUnit5特有
用法
@DisplayName("需要备注的测试名")
重复执行测试
@RepeatedTest 用于指定一个测试方法应该被重复执行多次*JUnit5特有
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.TestReporter;
public class MyRepeatedTest {
@RepeatedTest(3) // 指定测试方法应该被重复执行的次数
void myTest(TestReporter testReporter) {
// 测试代码
testReporter.publishEntry("Repetition #" + testReporter.getCurrentRepetition());
}
}
在这个例子中,myTest
方法将被重复执行3次。测试报告的输出将包含每次重复的编号,通过 TestReporter
参数输出。
嵌套测试类
@Nested 用于创建嵌套测试类。嵌套测试类允许你更好地组织和结构化测试代码,特别是当你有多个相关的测试场景时 JUnit5特有
指定测试运行器
@RunWith 用于指定测试运行器(Test Runner)。测试运行器负责运行测试类,并处理测试方法的执行