java – 不能@InjectMocks属性调用Mockito的方法然后返回?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 不能@InjectMocks属性调用Mockito的方法然后返回?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1398字,纯文字阅读大概需要2分钟。
内容图文
![java – 不能@InjectMocks属性调用Mockito的方法然后返回?](/upload/InfoBanner/zyjiaocheng/727/5f5f1ab46f8041eea7d25ed873d56403.jpg)
本周我开始使用Mockito,我有一个问题需要了解@InjectMocks字段.
我有一个类似A的A类:
public class A {
public B b;
public C c;
public String string;
}
当我在Mockito的JUnit测试中使用它时,我称之为:
@RunWith(MockitoJUnitRunner.class)
public class Test {
@Mock
B b;
@Mock
C c;
@InjectMocks
A a;
...
}
但我想设置字符串属性!我试试这样:
Mockito.when(a.getString()).thenReturn("STRING");
但是,测试会抛出异常:
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be ‘a method call on a mock’.
For example:
when(mock.getArticles()).thenReturn(articles);Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods. Those methods cannot be stubbed/verified.
2. inside when() you don’t call method on mock but on some other object.
3. the parent of the mocked class is not public. It is a limitation of the mock engine.
我可以做其他事来设置这个字段吗?
解决方法:
Can I do something else to set this field?
是的,您可以使用@Spy注释您的字段,如下所示:
@Spy
@InjectMocks
A a;
然后你就可以做Mockito.when(a.getString()).thenReturn(“STRING”);
实际上,当它仅使用@InjectMocks进行注释时,Mockito不会模拟它,默认情况下会创建A类的正常实例,这样就不能在其上使用Mockito.when().作为解决方法,您可以要求Mockito使用@Spy对其进行部分模拟.
您实际获得的例外是由于错误消息中提供的案例#2:
inside when() you don’t call method on mock but on some other object.
内容总结
以上是互联网集市为您收集整理的java – 不能@InjectMocks属性调用Mockito的方法然后返回?全部内容,希望文章能够帮你解决java – 不能@InjectMocks属性调用Mockito的方法然后返回?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。