自学内容网 自学内容网

mock、spy的使用方式区别

mock出来的对象,所有的属性、方法都会被置空,如果直接调用原本方法,会直接返回返回值类型对应的默认初始值,并不会执行方法体,通过 CallRealMethod 才能调用原方法。

spy出来的对象,是在目标对象或真实对象的基础上进行包装,可以直接调用原方法,不需要借助 CallRealMethod。

mock出来的对象可以使用 when…then… 或 do…when;

spy出来的对象只能使用 do…when,使用 when…then… 不会报错,但会先执行真实方法,再把 thenReturn 的 mock 数据替代原返回值进行返回,没有达到mock的效果。

建议 mock 一律使用 when…then,spy 一律使用 do…when,避免混淆。

package com.haier.baseManage;

import com.google.common.collect.Lists;
import com.haier.baseManage.model.dto.module.GreyVersion;
import com.haier.baseManage.service.impl.ModulePcVersionServiceImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;

import java.util.ArrayList;
import java.util.List;

/**
 * @author A2001111
 * @date 2024/10/9 15:33
 */
@MockitoSettings(strictness = Strictness.LENIENT)
public class ModulePcVersionServiceTest {

    @Spy
    @InjectMocks
    private ModulePcVersionServiceImpl service;

    // @Mock
    // private ModulePcVersionMapper mapper;


    @BeforeEach
    public void init(){
        MockitoAnnotations.openMocks(this);
        // Class<?>[] classes = {ModulePcVersionDO.class};
        // for (Class<?> aClass : classes) {
        //     TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), aClass);
        // }

        // Mockito.when(service.getBaseMapper()).thenReturn(mapper);
    }

    @Test
    public void test1(){
        // spy的方法,使用do.when.method
        Mockito.doReturn(true).when(service).saveBatch(Mockito.any());

        List<GreyVersion> greyVersions = new ArrayList<>();
        GreyVersion greyVersion = new GreyVersion();
        greyVersion.setAppVersionId(1L);
        greyVersion.setAsarVersionIds(Lists.newArrayList(1L,2L,3L));
        greyVersions.add(greyVersion);
        service.saveModulePcVersion(1L,greyVersions);
        greyVersion.setAsarVersionIds(null);
        service.saveModulePcVersion(1L,greyVersions);
    }

}


原文地址:https://blog.csdn.net/qq398581645/article/details/143022334

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!