Mockito單元測試自定義mock返回

在上篇博客https://blog.csdn.net/cml_blog/article/details/82820753介紹了SpringBoot中進行單元測試各種小技巧後,發現還有個遺漏的case,那就是在使用的mock的時候,可能需要根據不同的參數返回不同的數據。比如傳入aa返回true,傳入bb返回false等情況,這裏再補充一篇進行說明。

首先還是在AService中新增doSmthing2

@Component
public class AService {

    //略....

    public String doSmthing2(String key) {
        return "doSmthing2:" + key;
    }
}

在單元測試的時候,如果使用到了AService.doSmthing2方法,希望傳入不同參數時返回不同的mock數據,那麼就可以使用Mockito.argThat進行數據的自定義返回:

@RunWith(SpringRunner.class)
public class MockSelectorTest {
    @Mock
    private AService aService;

    @Test
    public void testMock() {
        Mockito.when(aService.doSmthing2(Mockito.anyString())).thenReturn("mockValue");
        assert aService.doSmthing2("value").equals("mockValue");
    }

    @Test
    public void testSelector() {
        //默認返回
        Mockito.when(aService.doSmthing2(Mockito.any())).thenReturn("mockANYValue");
        Mockito.when(aService.doSmthing2(Mockito.argThat(arg -> "aa".equals(arg)))).thenReturn("mockAAAValue");
        Mockito.when(aService.doSmthing2(Mockito.argThat(arg -> "bb".equals(arg)))).thenReturn("mockBBBValue");

        assert "mockAAAValue".equals(aService.doSmthing2("aa"));
        assert "mockBBBValue".equals(aService.doSmthing2("bb"));
        assert "mockANYValue".equals(aService.doSmthing2("cc"));
        assert "mockANYValue".equals(aService.doSmthing2(null));
    }

    @Test
    public void testSelectorMockitoHamcrest() {
        //默認返回
        Mockito.when(aService.doSmthing2(Mockito.any())).thenReturn("mockANYValue");
        Mockito.when(aService.doSmthing2(MockitoHamcrest.argThat(new BaseMatcher<String>() {
            @Override
            public boolean matches(Object item) {
                return "aa".equals(item);
            }

            @Override
            public void describeTo(Description description) {

            }
        }))).thenReturn("mockAAAValue");
        Mockito.when(aService.doSmthing2(MockitoHamcrest.argThat(new BaseMatcher<String>() {
            @Override
            public boolean matches(Object item) {
                return "bb".equals(item);
            }

            @Override
            public void describeTo(Description description) {

            }
        }))).thenReturn("mockBBBValue");

        assert "mockAAAValue".equals(aService.doSmthing2("aa"));
        assert "mockBBBValue".equals(aService.doSmthing2("bb"));
        assert "mockANYValue".equals(aService.doSmthing2("cc"));
        assert "mockANYValue".equals(aService.doSmthing2(null));
    }
}

以上代碼已經提交到工程:LearnTest

SpringBootLearning是對springboot學習與研究項目,是根據實際項目的形式對進行配置與處理,歡迎star與fork。
[oschina 地址]
http://git.oschina.net/cmlbeliever/SpringBootLearning
[github 地址]
https://github.com/cmlbeliever/SpringBootLearning

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章