junit单元测试出现空指针异常问题解决

在service类通过idea(shift+ctrl+t)快速创建测试类

如果是第一次创建,只出现create new test 选项,如果已经创建好,则会出现该测试类

本例使用的是junit4,所以这里选择junit4,下面的方法根据自己的需求勾选添加

自动生成的代码如下:

    @Before
    public void setUp() throws Exception {
    }
    @After
    public void tearDown() throws Exception {
    }
    @Test
    public void create() {
    }
    @Test
    public void deleteByName() {
    }
    @Test
    public void deleteAll() {
    }
    @Test
    public void getAllUser() {
    }
}

添加得单元测试代码如下:

public class UserServiceImplTest {
    @Autowired
    private UserService userService;

    @Test
    public void create() {
        /**
         * 添加用户测试
         */
        userService.create("1", "2");
    }
 }

直接运行该单元,报如下错误:


报空指针异常

原因分析:
测试类没有扫描到service层,导致userService注入失败,调用userService对应的方法的时候自然会报NullPointerException
在测试类上面加上@SpringBootTest()和@RunWith(SpringRunner.class)注解即可
如下:

@SpringBootTest()
@RunWith(SpringRunner.class)
public class UserServiceImplTest {

    @Autowired
    private UserService userService;

    @Test
    public void create() {
        /**
         *
         */
        userService.create("1", "2");
    }
}
测试类方法成功

拓展:junit提供了如下的如下的注解以及一些断言的核心方法


junit提供的注解以及对应的功能

一个测试类,单元测试方法的不同注解,对应的执行顺序是不一样的,前后的执行顺序为
@BeforeClass->@Before->@Test->@After->@AfterClass
每一个测试单元的前后执行顺序为:
@Before->@Test->@After

@BeforeClass修饰的方法会在所有方法被调用前被执行,
而且该方法是静态的,所以当测试类被加载后接着就会运行它,
而且在内存中它只会存在一份实例,它比较适合加载配置文件。
@AfterClass所修饰的方法通常用来对资源的清理,如关闭数据库的连接
@Before和@After会在每个测试方法的前后各执行一次。

junit的断言的核心方法
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容