• 单元测试使用Mock随笔


    @RunWith(MockitoJUnitRunner.class)
    public class UserServiceTest {
    
        @Spy
        @InjectMocks
        private UserServiceImpl userService;
        @Mock
        private UserMapper userMapper;
        @Mock
        private UserAddressService userAddressService;
    
        @Test
        public void saveOrUpdateTest() {
            try {
                when(userAddressService.check(any())).thenReturn(true);
                when(userService.remove(any())).thenReturn(true);
                doNothing().when(userMapper).setUTF8MB4();
                boolean result = userService.saveOrUpdate(null, null);
                System.out.println();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            Assert.assertTrue(true);
        }
    
    }
    @InjectMocks:是直接实例化一个对象,且可以实现自动注入,注入的对象就是@Mock或@Spy注解的对象
    @Mock:Mock出的对象,执行对象方法会返回Null,可以通过when().thenReturn方式或者doReturn().when().方法的方式指定返回值。
    如果对象方法是void的形式的,需要使用doNothing().when形式
    @Spy:实例化的对象会优先执行原有方法,如果想得到指定结果,则使用doReturn when形式。
    在MybatisPlus中和
    @InjectMocks配合使用,便可实现拦截处理封装好的this.remove等类似方法

    MyBatisPlus中Wrappers.lambdaQuery会使用到select某些指定字段的方法,此过程涉及到了MyBatisPlus需要初始化数据库表和实体类关系,否则无法生成select语句。
    在Mock中需要添加如下代码,否则报错:com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this entity
        @Before
        public void init() {
            TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), QyWxCorpUserEntity.class);
        }

     如果需要注入属性字段,如Spring中靠@Value注解的,可以直接使用反射赋值

    ReflectionTestUtils.setField(targetObject, "crm.secret", "aasdfasdfe");


     


  • 相关阅读:
    点击cell后 cell的背景不变,cell上的字体颜色发生改变的功能实现
    各种属性设置
    多列表 ,菜单
    正则表达式
    多个storyboard之间的跳转问题
    关于uicollectionview的个人学习
    uiscrollview的自动布局
    手动自动布局
    关于简单的跳转问题
    深入理解@class和#import的区别
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/15624692.html
Copyright © 2020-2023  润新知