功能测试:(系统测试)
方法:白盒测试用于(单元测试和集成测试)
JUnit进行单元测试

JUnit是一个开源的Java测试框架,专门用于编写和运行可重复的单元测试。它主要针对Java程序的底层源代码进行测试,包括类和方法级别的测试。
测试类型: 属于程序员测试(白盒测试),测试人员需要了解被测试代码的内部实现细节。
开发效率: 在极限编程(敏捷开发)和代码重构中被极力推荐使用,通过自动化单元测试可以显著提高开发效率。

注解分类

- 主要注解类型:
- Fixture注解:表示"在某些阶段必然被调用的代码"
- @Test注解:标记测试方法
- @Ignore注解:忽略某些测试
- @Parameters注解:参数化测试
- @RunWith注解:指定测试运行器
- Fixture子注解:
- @Before:每个测试方法执行前调用
- @After:每个测试方法执行后调用
- @BeforeClass:所有测试方法执行前调用(静态方法)
- @AfterClass:所有测试方法执行后调用(静态方法)

@Test注解
- @Test注解: 用于修饰测试方法,表示要对被测类的某个或某些方法进行测试。它只是一种注解,不表示对它进行测试,而是指明要测试的方法。
- 作用: 加了@Test的方法就是要测试的方法。加了@AfterClass注解的方法表示在测试完成后要执行的操作。


Ignore注解,用于修饰测试方法,表示暂时忽略该测试用例的执行。常见于两种情况:①被测方法尚未完成开发;②当前不需要执行该测试(如正在调试其他功能)。
Parameters注解,用于修饰产生数据集合的方法,实现参数化测试(每条测试用例对应一个参数)
RunWith注解,指定测试运行器(Runner),被修饰类中的所有测试方法都将由该Runner调用执行。
方法
断言(看我们测试是否通过)

- 核心作用:用于断定程序是否存在缺陷,是测试验证的主要手段。
- assertEquals:
- 功能:比较预期结果与实际结果是否相等
- 参数:(预期值, 实际值[, 错误消息])
- 特点:错误消息可选,若提供则在断言失败时显示
- fail:
- 作用:强制使测试立即失败
- 适用场景:用于测试无法到达的分支(如异常分支)
- 与assertEquals区别:fail直接判定失败,而assertEquals通过比较结果判定
setUp和tearDown

- setUp:
- 执行时机:每个测试方法执行前自动运行
- 功能:初始化测试环境(如建立数据库连接、打开文件等)
- 替代方案:可用@Before注解实现相同功能
- tearDown:
- 执行时机:每个测试方法执行后自动运行
- 功能:释放资源(如关闭连接、文件等)
- 替代方案:可用@After注解实现相同功能
- 类级别方法:
- setUpBeforeClass:所有测试方法执行前运行一次(对应@BeforeClass)
- tearDownAfterClass:所有测试方法执行后运行一次(对应@AfterClass)
- 选择建议:根据实际需求选择使用方法或注解形式,两者功能等效
安装Juint



引入Juint包





在IDEA中pom文件直接配置环境就好了

编写被测类




package org.example.test;
public class Calculator {
private static int result; // 静态变量,用于存储运行结果
public void add(int n){
result += n;
}
public void substract(int n){
result -= 1; // Bug:正确的应该是 result -= n
}
public void multiply(int n){
// 此方法尚未写好
}
public void divide(int n){
result /= n;
}
public void square(int n){
result = n * n;
}
public void squareRoot(int n){
for(;;); // Bug:死循环
}
public void clear(){ // 将结果清零
result = 0;
}
public int getResult(){
return result;
}
}
使用@Before进行测试前准备


使用@Ignore注解忽略测试




超时测试@RunWith和@Parameters注解

@Test
@Timeout(2000)
public void testSquareRoot() {
// fail("尚未实现");
calc.squareRoot(4);
assertEquals(2, calc.getResult());
}






编写测试数据参数方法和构造方法
package org.example.test;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.fail;
@RunWith(Parameterized.class)
public class SquareTest {
public static Calculator calc = new Calculator();
public int param;
public int result;
public SquareTest(int param, int result){
this.param = param;
this.result = result;
}
@Test
// 参数化测试
public static Collection getParamResult(){
return Arrays.asList(new Object[][]{
{0,0},
{2,4},
{-3,9},
});
}
}
编写@Paramters注解的测试方法
package org.example.test;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class) // 运行参数化测试
public class SquareTest {
public static Calculator calc = new Calculator();
public int param;
public int result;
public SquareTest(int param, int result){
this.param = param;
this.result = result;
}
@Test
public void testSquare(){
calc.square(param);
assertEquals(result, calc.getResult());
}
// 参数化测试
@Parameterized.Parameters
public static Collection getParamResult(){
return Arrays.asList(new Object[][]{
{0,0},
{2,4},
{-3,9},
});
}
}
读取文件进行参数化的步骤

package org.example.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class ReadFile {
public static void main(String[] args) {
try {
// 打开文件
File file = new File("D:\\桌面\\cases.txt");
// 读取文件
FileReader bytes = new FileReader(file);
// 读取文件内容
BufferedReader chars = new BufferedReader(bytes);
String row = null;
while ((row = chars.readLine()) != null) {
System.out.println(row);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
对读取的文件进行拆分
package org.example.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class ReadFile {
public static void main(String[] args) {
try {
// 打开文件
File file = new File("D:\\桌面\\cases.txt");
// 读取文件
FileReader bytes = new FileReader(file);
// 读取文件内容
BufferedReader chars = new BufferedReader(bytes);
String row = null;
while ((row = chars.readLine()) != null) {
// 以制表符\t进行拆分 列
String columns[] = row.split("\t");
for(String x: columns){
System.out.println(x + " ");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

3440

被折叠的 条评论
为什么被折叠?



