![](https://i-blog.csdnimg.cn/blog_migrate/7d12c98dbf430340e3ae64e72a87e741.gif)
Java系列文章目录
补充内容 Windows通过SSH连接Linux
第一章 Linux基本命令的学习与Linux历史
一、前言
- 学习测试Junit
Mock后面补充
二、学习内容:
- 测试的方法与条件
三、问题描述
- 对简单逻辑代码的测试
四、解决方案:
4.1 Junit测试方法的使用
- 写一个简单的
加法
但是里面实际上是乘法
🌟 Junit适合测试简单的没有依赖的类
package org.example;
public class SimpleExample {
public int add (int numberA,int numberB)
{
return numberA * numberB;
}
}
- 测试类的测试用例加上注解
@Test
🌟 其他注解后续补充这个比较重要先记录
使用断言来进行测试
package org.example;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
// assertNotEquals(5,simpleExample.add(2,2));
// assertTrue(4==simpleExample.add(2,2));
// assertFalse(5==simpleExample.add(2,2));
// assertNotNull(simpleExample);
// assertNull(simpleExample.add(2,2));
// assertSame(simpleExample.add(2,2),simpleExample.add(2,2));
// assertNotSame(simpleExample.add(2,2),simpleExample.add(2,2));
class SimpleExampleTest {
@Test
void twoPlusTwoShouldEqualFour()
{
SimpleExample simpleExample = new SimpleExample();
assertEquals(4,simpleExample.add(2,2));
}
@Test
void threePlusSevenShouldEqualTen()
{
SimpleExample simpleExample = new SimpleExample();
assertEquals(10,simpleExample.add(3,7));
}
}
- 遇到异常会出现如下情况
4.2 测试规范
🌟 独立性:确保测试方法之间相互独立,不依赖外部状态。
🌟 粒度控制:每个测试方法测试一个特定功能。
每个方法都测试一小部分功能:
package org.example;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class GraderTest {
@Test
void testGradeA() {
Grader grader = new Grader();
char letterGrade = grader.determineLetterGrade(100);
assertEquals('A', letterGrade);
}
@Test
void testGradeB() {
Grader grader = new Grader();
char letterGrade = grader.determineLetterGrade(80);
assertEquals('B', letterGrade);
}
@Test
void testGradeC() {
Grader grader = new Grader();
char letterGrade = grader.determineLetterGrade(70);
assertEquals('C', letterGrade);
}
@Test
void testGradeD() {
Grader grader = new Grader();
char letterGrade = grader.determineLetterGrade(60);
assertEquals('D', letterGrade);
}
@Test
void testGradeF() {
Grader grader = new Grader();
char letterGrade = grader.determineLetterGrade(50);
assertEquals('F', letterGrade);
}
@Test
void testGradeOutOfRange() {
Grader grader = new Grader();
//如果抛出异常就是对的
System.out.println(assertThrows(IllegalArgumentException.class, () -> grader.determineLetterGrade(-1)));
}
}
- 写一个简单的分数判断逻辑
🌟 每个测试方法测试一个特定功能。我们可以把下面代码的else去掉
package org.example;
public class Grader {
public char determineLetterGrade(int numberGrade) {
if (numberGrade < 0 || numberGrade > 100) {
throw new IllegalArgumentException("Grade not in range");
} else if (numberGrade >= 90) {
return 'A';
} else if (numberGrade >= 80) {
return 'B';
} else if (numberGrade >= 70) {
return 'C';
} else if (numberGrade >= 60) {
return 'D';
} else {
return 'F';
}
}
}
五、总结
- 命名规范:使用清晰且具有描述性的类名和方法名。
- 注解使用:合理使用 @Test、@Before、@After 等注解。
- 断言:用适当的断言方法(如 assertEquals())验证预期结果。
- 异常测试:有效捕获和验证异常。
- 独立性:确保测试方法之间相互独立,不依赖外部状态。
- 粒度控制:每个测试方法测试一个特定功能。
- 可读性:代码应清晰简洁,易于维护。
- 合理依赖:使用 Mock 进行依赖替换以简化测试。
- 持续集成:定期运行测试,确保修改后功能正常。
(后续有遇到问题再添加)
声明:如本内容中存在错误或不准确之处,欢迎指正。转载时请注明原作者信息(麻辣香蝈蝈)。