当前位置: 首页 > backend >正文

单元测试报NullPointerException

测试功能见https://blog.csdn.net/awieo/article/details/136316293 

1、一开始一直报NullPointerException,debug发现首先这条代码完全没执行到,显示ecommerceShopsMapper==null;

Mockito.when(ecommerceShopsMapper.selectEcommerceShopsByShopName(Mockito.anyString())).thenReturn(null);

2、原因A是在 @BeforeEach 方法中,已经使用MockitoAnnotations.openMocks(this); 来初始化Mock对象,可以直接使用 @InjectMocks 注解来注入 EcommerceShopsServiceImpl 对象到 importShopTest 中,无需手动创建一个实例。

   @BeforeEachpublic void setUp() {MockitoAnnotations.openMocks(this);
//此行多余     importShopTest = new EcommerceShopsServiceImpl();}

原因B是这里的注解写错了,应为@InjectMocks;

   @MockBean //应为@InjectMocks private EcommerceShopsServiceImpl importShopTest;

3、修改后代码为

package com.ecommerce.system.service.impl;import com.ecommerce.common.exception.ServiceException;
import com.ecommerce.system.domain.EcommerceShops;
import com.ecommerce.system.mapper.EcommerceShopsMapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
//import org.springframework.boot.test.mock.mockito.MockBean;
import javax.validation.Validator;
import java.util.ArrayList;
import java.util.List;import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;public class EcommerceShopsServiceImplTest {@Mockprivate EcommerceShopsMapper ecommerceShopsMapper;@Mockprivate Validator validator;@InjectMocksprivate EcommerceShopsServiceImpl importShopTest;@BeforeEachpublic void setUp() {MockitoAnnotations.openMocks(this);
//        importShopTest = new EcommerceShopsServiceImpl();}@Testpublic void testImportShop_WithValidData() {List<EcommerceShops> shopList = new ArrayList<>();EcommerceShops shop1 = new EcommerceShops();shop1.setId(65);shop1.setShopName("Shop1");shop1.setShopOwner("Owner1");shop1.setMarketId(101L);//    shop1.setMarketName("Market1");shop1.setShopContact("13145678954");shop1.setBuslicenseNumber("ABC123");//   shop1.setAuditStatus(0);shop1.setUserId(1L);shopList.add(shop1);// 加入正确的数据String operName = "TestUser";
//        当调用 ecommerceShopsMapper 对象的 selectEcommerceShopsByShopName 方法并传入任意字符串参数时,
//        Mockito将模拟该方法的行为,并返回 null 作为结果。这种模拟行为通常用于单元测试中,以便方便地控制方法的返回值,以验证代码的其他部分如何处理这些返回值。//    when(ecommerceShopsMapper.selectEcommerceShopsByShopName(anyString())).thenReturn(null);Mockito.when(ecommerceShopsMapper.selectEcommerceShopsByShopName(Mockito.anyString())).thenReturn(null);String result = importShopTest.importShop(shopList, true, operName);assertEquals("恭喜您,数据已全部导入成功!共 1 条,数据如下:<br/>" +"1、账号 Shop1 导入成功", result);}}

http://www.xdnf.cn/news/11202.html

相关文章:

  • C++string类使用大全
  • 基于51单片机的恒温控制系统设计
  • session.setAttribute和session.getAttribute
  • L7805CV-ASEMI三端稳压管L7805CV
  • 多图详细教你注册Google(Gmail)新账号,常见问题和注意事项
  • 以ATTCK为例构建网络安全知识图
  • 网络安全(黑客)2024小白自学必看
  • Matlab学习——求解微分方程(组)
  • 【实用党】推荐几款实用的AI工具
  • Android游戏开发之旅View类详解自定义View的常用方法:onFinishInflate
  • JDK6 新特性
  • micro SD(TF)卡详解
  • pure virtual function call--虚函数调用的错误
  • MPP文件怎么打开?五种方法总有最合适!
  • 搭建免费的ftp服务器
  • 别人总结的英语网站大全
  • uploadify 火狐 php,ThinkPHP 解决使用uploadify 在Firefox浏览器上传图片出现HTTP 500报错...
  • C++使用CriticalSection前需要先初始化
  • ResultSetMetaData用法介绍
  • mysql2005中文版_SQL Server 2005 sp4 简体中文完整免费版下载
  • 去AV片马赛克,开发者被抓了
  • 轻论坛StartBBS、YouBBS、Xiuno对比
  • C++表达式括号匹配
  • 安卓(Android) 刷机教程(任何机型、小米、华为等等)
  • #Linux存储的基本管理
  • Android定时器:实现定时的几种方法
  • 一刀999?怎样让你的 iPhone 手游也拥有开挂般的体验
  • 这是我见过最全的权限系统设计方案!
  • 一文读懂AlphaGo Zero算法
  • JRTPLIB使用实例