相关文章推荐
豁达的羊肉串  ·  Qt Json的使用教程 - ...·  13 小时前    · 
直爽的牛肉面  ·  Camunda ...·  1小时前    · 
完美的稀饭  ·  我可以使用libcurls ...·  10 月前    · 
踢足球的泡面  ·  java 实现 setTimeout 和 ...·  10 月前    · 
拉风的蟠桃  ·  java - spring ...·  1 年前    · 
风流的匕首  ·  The Executable Jar Format·  1 年前    · 
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core --> < dependency > < groupId > org.mockito </ groupId > < artifactId > mockito-core </ artifactId > < version > 2.23.4 </ version > < scope > test </ scope > </ dependency > < dependency > < groupId > org.junit.jupiter </ groupId > < artifactId > junit-jupiter-api </ artifactId > < version > 5.3.2 </ version > < scope > test </ scope > </ dependency > </ dependencies >

1.2    使用注意事项

Mock bean顺序问题,异常放到最后

2    Mockito Demo

2.1    Demo  正常

test类

package com.ddwei.moduleA.service.impl;
import com.ddwei.api.bff.moduleA.dto.request.CallServerQuery;
import com.ddwei.api.bff.moduleA.dto.response.CallServerDto;
import com.ddwei.api.exception.DBusinessException;
import com.ddwei.infrastructure.referenceservice.ComcACLService;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class CallServerServiceImplTest{
    @Mock
    public ComcACLService comcACLService;
    @InjectMocks
    CallServerServiceImpl callServerServiceImpl;
     * 测试 调用防腐层方法 methodA
     * @author weidoudou
     * @date 2022/2/17 12:57
     * @param
     * @return void
    @Test
    public void methodA() throws DBusinessException {
        //1     测试返回正常值
        CallServerDto remotDto = CallServerDto.builder().outputPropertyA("111").build();
        Mockito.when(comcACLService.methodA(Mockito.any())).thenReturn(remotDto);
        Assertions.assertEquals("111", callServerServiceImpl.methodA(new CallServerQuery()).getOutputPropertyA());
        //2     测试抛出异常
        Mockito.when(comcACLService.methodA(Mockito.any()))
                .thenThrow(new DBusinessException("1111111","测试异常情况","RemotModel"));
        Assertions.assertThrows(DBusinessException.class,()->{
            callServerServiceImpl.methodA(new CallServerQuery());

2.2    Demo  抽象类

方案:针对抛出异常进行mock

Mock的类

package com.ddwei.test.core.chapter0.mockito;
public abstract class AbstractBeanInstance {
    public static <T> T getBeanInstance(Class<T> cla){
        return (T)ApplicationContextUtil.getBean(cla);

引用的Maven Class:

package com.ddwei.test.core.chapter0.mockito;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    public static Object getBean(Class<?> classType){
        return applicationContext.getBean(classType);
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

Test类:

package mockito.mockito;
import com.ddwei.test.core.chapter0.mockito.AbstractBeanInstance;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class MockTest9 {
    @Test
    public void getBeanInstance(){
        AbstractBeanInstance abstractBeanInstance = Mockito.mock(AbstractBeanInstance.class,Mockito.CALLS_REAL_METHODS);
        Class<MockTest9> class1 = MockTest9.class;
        Assertions.assertThrows(Exception.class,()->{
            abstractBeanInstance.getBeanInstance(class1);

2.3    Demo  Bean

Test类

package com.ddwei.moduleA.service.impl;
import com.ddwei.api.bff.moduleA.dto.response.CallServerDto;
import mockit.Tested;
import org.junit.Test;
public class CallServerDtoTest {
    @Tested
    CallServerDto callServerDto;
    @Test
    public void Test(){
        callServerDto = new CallServerDto();
        callServerDto = CallServerDto.builder().build();
        callServerDto = new CallServerDto("");
        callServerDto.setOutputPropertyA("");
        callServerDto.getOutputPropertyA();
package com.ddwei.api.bff.moduleA.dto.response;
import lombok.*;
import java.io.Serializable;
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CallServerDto implements Serializable {
     * 属性A
    private String outputPropertyA;

3    Mockito  报错

3.1    java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker

设置--》file Structure-->SDKs-->对应版本添加  jdk的 tools jar包 即可

(18条消息) 记录报错 java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker_kingtok的博客-CSDN博客

3.2    Invalid use of argument matchers!

解决方案:将mock的时候参数要用Mockito.any() 不能直接用参数;同样,list类型用Mockito.anyList()

https://blog.csdn.net/weixin_30533797/article/details/101564648

3.3    Mockito Unable to acquire JDBC Connection

问题描述:本地不报错,但是上测试环境后总是报上述错误,错误原因是数据库连接部分没有mock住,但是mock住数据库连接后还是报这个错。

解决方案:因为mock测试达标80%就好,成功的已经达标了,所以把报同一类型错误的方法全部注掉了,问题解决