CodeGym/Java Course/Module 3 a ɛto so abien/使用參數調用模擬方法

使用參數調用模擬方法

開放

4.1 方法參數

添加到模擬對象的先前規則處理沒有參數的方法。以及如何為帶參數的方法創建規則?此外,我想創建規則,以便對於某些參數值有一個結果,而對於其他參數值則有另一個結果。

你也可以這樣做。如果您希望該方法返回帶有特定參數的特定內容,那麼規則可以這樣寫:

Mockito.doReturn(result).when(an object).method name(parameter);

讓我們看一個例子來更好地理解。讓我們的 List 在請求第 10 個元素時返回名字 Ivan,在請求第 500 個元素時返回名字 Marya。說到做到。

@ExtendWith(MockitoExtension.class)
class ParamsTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation() {
        //adding the first rule
        Mockito.doReturn("Ivan").when(mockList).get(10);
        //adding a second rule
        Mockito.doReturn("Maria").when(mockList).get(500);

        assertEquals("Ivan", mockList.get(10));
        assertEquals("Maria", mockList.get(500));

    }
}

4.2 參數模板

狡猾的同事馬上會問我這個問題:“如果方法需要參數,但對於任何值它都必須返回相同的結果怎麼辦?”。我們不要寫:

Mockito.doReturn("Ivan").when(mockList).get(1);
Mockito.doReturn("Ivan").when(mockList).get(2);
Mockito.doReturn("Ivan").when(mockList).get(99);

不,沒有人強迫你那樣寫。如果您想將規則添加到適用於具有任何參數的方法的模擬對象,那麼有一個特殊的對象:

Mockito.any()

我們的示例將這樣寫:

Mockito.doReturn("Ivan").when(mockList).get(any(int.class));

這裡有一些細微差別。該對象Mockito.any()具有類型Object,因此有不同類型參數的類似物:

方法 參數類型
1個 任何() 包含 null 的對象
2個 任何(類名.類) 班級名稱
3個 任何整數() 整數
4個 任何布爾值() 布爾值
5個 任何雙() 雙倍的
6個 任何列表() 列表

更準確地說,我們的例子應該是這樣的:

Mockito.doReturn("Ivan").when(mockList).get(anyInt());

4.3 doAnswer()方法

我們了解了虛擬方法的複雜行為。遲早會出現您希望此虛擬方法具有復雜行為的情況。例如,它應該根據參數返回值,將字符串轉換為大寫。

這個 - 有一個特殊的方法doAnswer(),它傳遞一個函數來做你需要的:

Mockito.doAnswer(function).when(an object).method name(parameter);

讓我們讓get()類方法List返回傳遞給它的參數的平方。並編寫如下程序:

@ExtendWith(MockitoExtension.class)
class DoAnswerTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation() {
        Mockito.doAnswer(invocation -> {
            int parameter = invocation.getArgument(0);
            return parameter * parameter;
        }).when(mockList).get(anyInt());

        assertEquals(100, mockList.get(10));
        assertEquals(25, mockList.get(5));
    }
}

我們使用 Answer 類的對象定義了該函數。

留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言