在测试,尤其是接口测试过程中,我们经常会碰到 java.lang.NullPointerException 的报错,那么是什么原因导致的呢,我们在测试用例设计的时候,我们是否可以有效覆盖,从而规避空指针类的问题呢?
出现空指针异常,一般也是以下几种原因导致:
调用一个空对象的实例方法。
class Person {
private String name;
private int age;
public void Person(String name, int age) {
this.name = name;
this.age = age;
}
public String get() {
return name + ", " + age;
}
public static void main(String[] agrs){
Person person = null;
System.out.println(person.get());
}
通常在实际业务开发过程中,经常会先初始化一个对象,在具体的逻辑中再进行实例化,这种情况是最常见的,比如:接口请求时,传入某个特定的参数后,可能会报 java.lang.NullPointerException
在接口分析阶段,我们就需要和研发确认业务逻辑,接口有时候有非常多的入参,但入参又可能会分成几种不同作用的入参。
作用于业务逻辑跳转
作用于对象实例化判断
作为业务数据处理
我们需要将这些参数进行归类,设计测试用例时,对于作用于对象实例化判断的这类型的参数,建议是要进行单独考虑的 ,用于覆盖可能产生空指针异常报错。
访问或修改空对象的字段。
public static void main(String[] agrs){
Person person = null;
System.out.println(person.getName());
}
其实和第一种情况是类似的,也是由于空对象引起的,针对作用于对象实例化的参是进行用例覆盖。
获取一个空对象的长度
public static void main(String[] agrs){
List<Person> personList = new ArrayList<>();
personList.add(new Person("zhangsan",19));
personList.add(new Person("lisi",20));
personList.add(new Person(null,21));
System.out.println(personList.get(3).getName().length());
}
在业务逻辑中,会经常对一些值进行一些长度判断,比如,大于多少字,显示 XX…这种。
但这种情况一般都是由于开发在使用数据时,未做判空导致。
还有就是数据库数据存储不规范造成的,直观所能看到的大部分数据,其实都是来源于数据库,数据库的存储往往又是多样性的,可能在这几百条数据中,就会偶尔有那么条不合规的情况。这种的很难人工验证和排查到,但偶尔命中后,要及时重视,并跟进。向上推动,从数据库源头解决此类问题。
不过话说回来,想在测试用例这端覆盖此类场景还是比较难的。需要非常了解业务,以及对于开发人员开发思路也要非常了解(经常出这种问题的开发,他一定还会出同样类型的问题)
访问或修改一个空的数组时
public static void main(String[] agrs){
boolean b = false;
String[] strings =null;
if(b){
strings = new String[]{"张三", "李四"};
}
System.out.println(strings[1]);
}
其实和第一种情况是非常类似的,业务处理过程中,往往是先定义参数,随业务逻辑的进行,会对参数进行初始化,当定义的参数未赋值或者被赋值对象也是 null 时,就会抛出空指针异常的问题。
总得来讲,用例设计时,对于作用于对象或参数实例化判断的参数,一定要进行单独考虑的。
这种对象或实例被赋予的值为 null 的场景,我们其实也是可以在进行数据准备时,造一些异常数据,来验证一下程序的健壮性的。但可能对测试要求会高一些,需要熟悉业务数据库存储情况,业务代码逻辑相关,才能够针对特定场景,制定特定的用例。
近期基于微信推出的 测试答疑社区(FQA)特聘笔友的2位测试大佬及几位研发人员坐阵,有需求的朋友可以联系小编报名入群
ps:基于微信原因是因为都是大家日常使用频率高,没必要切换到另一个平台,便于大家提问、学习!
资源分享
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走…
这些资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….