测试概览
测试是用于促进鉴定软件正确性、完整性、安全性和软件质量的过程。在开发的过程中测试是必不可少的,测试一般分为四个阶段:单元测试
,集成测试
,系统测试
,验收测试
;对于后端开发人员而言,需要会单元测试和集成测试。测试的方法一般分为三种:白盒测试
,黑盒测试
,灰盒测试
:
白盒测试
白盒测试是清楚软件的内部结构,清楚其源代码逻辑,是用于验证源代码和代码逻辑的正确性的。其中,单元测试就属于白盒测试。
黑盒测试
黑盒测试是不清楚软件的内部结构,不清楚源代码逻辑,是用于验证软件的功能、和兼容性方面问题的。其中,系统测试和验收测试都属于黑盒测试。
灰盒测试
灰盒测试顾名思义,兼顾了白盒与黑盒测试的特点,既要关注软件的内部结构,又要考虑软件的外在表现。其中,集成测试就属于灰盒测试。
单元测试
单元测试:是针对程序的最小的功能单元(方法),编写测试代码对其正确性进行测试。
JUnit测试框架进行单元测试
JUnit是目前最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供);在使用JUnit这样的测试框架之前,我们一般是通过编写测试类通过main方法对代码进行测试的,这样做从功能上而言,是可以达到一样的效果,但实际上还是存在一些问题:
- 测试代码和源代码没有区分,写在一起,难以维护。
- main方法测试多个功能,假如一个功能测试失败,程序直接停止,影响后面的功能测试。
- 无法自动化测试,得到测试报告。
这些是用main方法测试的局限,但是使用了JUnit框架进行测试,就可以弥补这些不足:JUnit的测试代码和源代码是分开的,便于维护;JUnit可以根据需要自动化测试,功能测试之间相互不会影响;JUnit可以自动分析测试结果,产出测试报告,测试更加高效。 所以说推荐使用JUnit测试框架进行单元测试。
使用JUnit测试框架
JUnit是第三方提供的测试框架,在Maven项目中,需要在pom.xml文件中引入其maven坐标:
然后在test/java目录下,创建一个测试类,然后编写对应的测试方法(一般而言,测试类都叫xxxxxTest),并且在方法(方法一般叫testXxxxx)上使用@Test注解(这是JUnit提供的注解)表明这是一个测试方法。 注意,Junit中单元测试的方法必须声明为public void,否则无法测试! 根据以上规则,举一个例子:现在有一个UserService类,其中有两个方法,一个是根据用户的身份证判断用户的年龄,一个是根据用户的身份证判断用户的性别:
public class UserService {
/**
* 根据身份证号码,计算出用户的年龄
* @param idCard 身份证号码
* @return 用户年龄
*/
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 身份证号码
* @return 性别
*/
public String getGender(String idCard) {