[英]Mockitio - returning null when expecting mock in unit test
我在一个名为FruitBasket
的类中有一个方法, FruitBasket
对此进行测试:
// Method to test
public Fruit getFruit(String fruitName) {
Fruit fruit = new Fruit();
if(fruitExists(fruitName)) {
fruit = getFruitByName(fruitName);
}
else {
fruit.setFruitName(fruitName);
saveFruit(fruit);
fruit = getFruitByName(fruitName);
}
return fruit;
}
private Fruit getFruitByName(String fruitName) {
return fruitDao.getFruitByName(fruitName);
}
public boolean fruitExists(String fruitName) {
return fruitDao.fruitExists(fruitName);
}
我为此方法编写了单元测试,如下所示:
@Mock
FruitDao fruitDao;
@Mock
Fruit mockFruit;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testgetFruitMethod() {
FruitBasket fruitBasket = new FruitBasket (fruitDao);
Fruit apple = fruitBasket.getFruit("Apple");
when(fruitDao.fruitExists(anyString())).thenReturn(true);
when(fruitDao.getFruitByName(anyString())).thenReturn(mockFruit);
assertThat(apple, instanceOf(Fruit.class));
}
但是,测试失败并出现断言错误。 预期会有Fruit实例,但返回null。
谁能发现我为什么会空的问题?
您对fruitBasket.getFruit("Apple");
调用fruitBasket.getFruit("Apple");
会导致尚未配置的FruitDao
调用,从而知道期望什么调用以及如何响应它们。 我猜想mockito的默认行为是在没有线索的情况下只是返回null而不是抛出异常,因此您嘲笑的FruitDao
返回null Fruit
,并且测试FruitDao
。
因此,您需要先执行when()
,然后调用Fruit apple = fruitBasket.getFruit("Apple");
尝试在使用前准备模拟:
@Test
public void testgetFruitMethod() {
// given
when(fruitDao.fruitExists(anyString())).thenReturn(true);
when(fruitDao.getFruitByName(anyString())).thenReturn(mockFruit);
FruitBasket fruitBasket = new FruitBasket (fruitDao);
// when
Fruit apple = fruitBasket.getFruit("Apple");
// then
assertThat(apple, instanceOf(Fruit.class));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.