簡體   English   中英

Mockito模擬方法的價值

[英]Mockito mocking the value of a method

被測課程:

class FruitQuality {

  void testQuality() {
    getfruits();
    //some code
  }

  List<Fruits> getfruits() {
    return orange;
  }
}

下面是測試代碼。 我嘲笑了受測類,並重寫了方法getfruits的返回值。 但是,當我運行模擬時,我沒有得到預期的模擬返回值。 如果顯式模擬了Easymock的返回值,則可以用它們代替測試中的類的方法。 模擬真實對象方法時,如何獲得模擬的返回值。

@Test
public void test() {
  Fruits fruit= new Fruits();
  fruit.setFruit("orange");
  List<Fruits> fruitsList = new ArrayList<Fruits>();
  fruitsList.add(fruit);

  Fruits mock = Mockito.mock(FruitQuality.class)
  classUnderTest = new FruitQuality();
  when(mock.getfruits()).thenReturn(fruitsList);

  result= classUnderTest.getfruits();
  assertEquals(result, fruitsList);
}

通常,在編寫單元測試時,您有一個包含要測試的實現代碼的被測類,同時模擬了被測類所依賴的其他類的方法。

參考您的示例,您將有一個課程

public class FruitQuality {
    private FruitProvider fruitProvider;

    public List<Fruit> testQuality() {
        List<Fruit> fruits = fruitProvider.getfruits();
        /* Some code doing something with fruits, e.g., filtering. */
        return fruits;
    }
}

還有二等

public class FruitProvider {
    public List<Fruits> getfruits() {
        /* Returning some fruits ... */
    }
}

現在,您可以模擬您的Provider來測試您的被測類:

@RunWith(MockitoJUnitRunner.class)
public class FruitQualityUnitTest {
    @InjectMocks
    private FruitQuality fruitQuality;
    @Mock
    private FruitProvider fruitProvider;

    @Test
    public void testQuality() {
        /* Mocking the provider. */
        Fruits fruit= new Fruits();
        fruit.setFruit("orange");
        List<Fruits> fruitsList = new ArrayList<Fruits>();
        fruitsList.add(fruit);
        when(fruitProvider.getFruits()).thenReturn(fruitsList);

        /* Invoke the method under test. */
        List<Fruits> result = fruitProvider.testQuality();

        /* Assert that some methods where called. */
        verify(fruitProvider, times(1)).getFruits();

        /* If the method would return a value, you can do some assertions based on the mocked method calls. */
        assertEquals(result, fruitsList);
    }
}

如果要測試要模擬的同一對象的方法,可以使用@Spy注釋而不是@Mock,以確保只有您顯式地模擬的方法會執行除原始實現之外的其他操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM