單元測試使用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(), ""), CorpUserEntity.class);
    }

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

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

 



 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM