[英]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.