介绍
**测试:**是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
**阶段划分:**单元测试、集成测试、系统测试、验收测试。

1单元测试
- 
介绍:对软件的基本组成单位进行测试,最小测试单位。
 - 
目的:检验软件基本组成单位的正确性。
 - 
测试人员:开发人员
 
2. 集成测试
- 
介绍:将已分别通过测试的单元,按设计要求组合成系统或子系统,再进行的测试。
 - 
目的:检查单元之间的协作是否正确。
 - 
测试人员:开发人员
 
3. 系统测试
- 
介绍:对已经集成好的软件系统进行彻底的测试。
 - 
目的:验证软件系统的正确性、性能是否满足指定的要求。
 - 
测试人员:测试人员
 
4验收测试
- 
介绍:交付测试,是针对用户需求、业务流程进行的正式的测试。
 - 
目的:验证软件系统是否满足验收标准。
 - 
测试人员:客户/需求方
 
测试方法:
白盒测试:
清楚软件内部结构、代码逻辑。
用于验证代码、逻辑正确性。
黑盒测试 :
不清楚软件内部结构、代码逻辑。
用于验证软件的功能、兼容性、验收测试等方面。
灰盒测试:
结合了白盒测试和黑盒测试的特点,既关注软件的内部结构又考虑外部表现(功能)。
JUnit:
- 最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试
 
平时如果在main方法进行测试时,会存在如下问题:
- 
测试代码与源代码未分开,难维护。
 - 
一个方法测试失败,影响后面方法。
 - 
无法自动化测试,得到测试报告。
 
使用了JUnit单元测试 框架进行测试,将会有以下优势:
- 
测试代码与源代码分开,便于维护。
 - 
可根据需要进行自动化测试。
 - 
可自动分析测试结果,产出测试报告
 
测试案例:
main目录下待测试代码:
public class UserService { /** * 给定一个身份证号, 计算出该用户的年龄 * @param idCard 身份证号 */ public Integer getAge(String idCard){ if (idCard == null || idCard.length() != 18) { throw new IllegalArgumentException("无效的身份证号码"); } String birthday = idCard.substring(6, 14); LocalDate parse = LocalDate.parse(birthday, DateTimeFormatter.ofPattern("yyyyMMdd")); return Period.between(parse, LocalDate.now()).getYears(); } /** * 给定一个身份证号, 计算出该用户的性别 * @param idCard 身份证号 */ public String getGender(String idCard){ if (idCard == null || idCard.length() != 18) { throw new IllegalArgumentException("无效的身份证号码"); } return Integer.parseInt(idCard.substring(16,17)) % 2 == 1 ? "男" : "女"; } }
1要使用junit测试首先需要在pom.xml中引入相关依赖
<!--Junit单元测试依赖-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
2在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。
@Test
public void testGetAge(){
Integer age = new UserService().getAge("110002200505091218"); System.out.println(age);
}
3运行测试

注意:
- 
测试类的命名规范为:XxxxTest(因为在maven生命周期运行test时,会按照该命名规范的测试类进行查找测试)
 - 
测试方法的命名规定为:public void xxx(){...}
 
常见注解

断言:
用来帮我们确定被测试的方法是否按照预期的效果正常工作

示例:

测试结果:
