MockIto插桩常规单元测试

文章目录

业务场景

针对MessageSendServiceImpl完成相关方法的单元测试用例

常规service方法

常规sercive方法 implements MessageSendService,没有继承MybatisServiceImpl,因为成员变量都是被final修饰,Test方法中通过new构造函数的方法完成注入

java 复制代码
@Slf4j
@Service
@AllArgsConstructor
public class MessageSendServiceImpl implements MessageSendService {
    
    /**
     * 消息渠道管理服务.
     */
    private final MessagexxxManager messagexxManager;
    
    /**
     * 消息模板管理服务.
     */
    private final MessageyyeManager messageyyManager;
    
    /**
     * kafka操作template.
     */
    private final KafkaTemplate<String, String> kafkaTemplate;
    
   
    @Override
    public ApiResultDto<String> sendMessage(MessageSendDto messageSendDto) {
        log.info("receive a request to send message with parameter : {}", messageSendDto);
        
        // 必要参数非空验证.
        if (!necessaryNotNull(messageSendDto)) {
            return ApiResultDto.failed(ApiErrorCode.VALID_FAILED, "消息参数错误");
        }
        xxx
        return ApiResultDto.success(kafkaParam.getBatchId());
    }
}

单元测试

java 复制代码
@Slf4j
@ExtendWith(MockitoExtension.class)
@SuppressWarnings("checkstyle:all")
class MessageSendServiceImplTest {
    
    /**
     * 消息渠道管理服务.
     */
    @Mock
    private MessagexxxManager messagexxxManager;
    
    /**
     * 消息模板管理服务.
     */
    @Mock
    private MessageyyyManager messageyyyManager;
    
    /**
     * kafka操作template.
     */
    @Mock
    private KafkaTemplate<String, String> kafkaTemplate;
   
    /**
     * 消息发送Service.
     */
    private MessageSendServiceImpl messageSendService;
 
    @BeforeEach
    void initialMessageSendService() {
        this.messageSendService = new MessageSendServiceImpl(messageChannelManager, messageTemplateManager, kafkaTemplate);
    }

      @Test
    @DisplayName("测试发送消息")
    void testSendByMessageId_Success_thirdParty() {
        // Arrange
        MessageChannelEntity messageChannel = JacksonUtils.tryStr2Bean("xxx", MessageChannelEntity.class);
        MessageTemplateEntity messageTemplate = JacksonUtils.tryStr2Bean("xx", MessageTemplateEntity.class);
        Mockito.doReturn(messageChannel).when(messageChannelManager).getById(any());
        Mockito.doReturn(messageTemplate).when(messageTemplateManager).getById(any());
        Mockito.doReturn(new ThirdPartyApiProcessor(apiCallService, callChainService)).when(processorFactory).getMessageProcessor(any());
        // Act
        MessageSendDto messageSendDto = getThirdPartyMessageSendDto();
        messageSendDto.setTemplateId(UUID.randomUUID());
        ApiResultDto<String> result = messageSendService.sendMessage(messageSendDto);
        // Assert
        assertThat(result.getEr()).isEqualTo(ApiErrorCode.SUCCESS.getCode());
    }
  }
相关推荐
禁默21 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood27 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Code哈哈笑30 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
gb421528733 分钟前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶33 分钟前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
zfoo-framework41 分钟前
【jenkins插件】
java
风_流沙1 小时前
java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
java·数据库·elasticsearch
darkdragonking1 小时前
OpenEuler 22.03 不依赖zookeeper安装 kafka 3.3.2集群
kafka
ProtonBase1 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构