测试过程中,经常出现 java.lang.NullPointerException 的原因分析和探讨

在测试,尤其是接口测试过程中,我们经常会碰到 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:基于微信原因是因为都是大家日常使用频率高,没必要切换到另一个平台,便于大家提问、学习!


资源分享

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走…

在这里插入图片描述

​这些资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值