Mockito间谍返回带有org.Mockito.exceptions.missing.Wrong TypeOfRetu



我正在尝试使用Mockito测试以下代码:

class Item {
String name;
int age;
String getInfo() {
return name + age.toString();
}
}
class Article {
Item item = new Item();
Article() {
}
void calculate() {
item = prepareItem();
String info = item.getInfo();
println("The info is " + info);
}
Item prepareItem() {
item.name = "item";
return item;
}

我正在尝试测试方法calculate(),这是测试用例:

@Test
public void testCalculate() {
@Mock Item item;
Article article = new Article();
Article articleSpy = Mockito.spy(article);
Mockito.doReturn(item).when(articleSpy).prepareItem();
article.calculate();
}

然后我得到了以下信息:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Item$$EnhancerByMockitoWithCGLIB$$4ffb1868 cannot be returned by getMetaClass()
getMetaClass() should return MetaClass

间谍可以返回模拟对象吗?这个错误的原因是什么?如何修复?

谢谢!

@Mock不适用于局部变量。你为什么需要模拟?我想你不需要嘲笑这个项目。只需根据您的需要创建一个测试对象Item。Mock是为了防止调用真正的方法。

试试这个:

@Test
public void testCalculate() {
Item item = new Item();
Article article = new Article();
Article articleSpy = Mockito.spy(article);
Mockito.doReturn(item).when(articleSpy).prepareItem();
article.calculate();
}

如果你真的需要间谍返回Mock,Item item = Mockito.mock(Item.class);应该在Mocktio 1.10中工作。我不建议你这样做,因为在大多数情况下,这是不需要的。大多数时候,您可以简化代码(=>测试驱动的开发)。

如果你绝对需要它,这将是一个有效的例子:

Item item = Mockito.mock(Item.class);
Mockito.when(item.getInfo()).thenReturn("bla bla");
Article article = Mockito.spy(Article.class);
Mockito.doReturn(item).when(article).prepareItem();
article.calculate();

相关内容

  • 没有找到相关文章

最新更新