打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java – 手动实例化@InjectMock带注释的字段

我已经浏览了一些博客,以了解Mockito注释如何工作的基础知识.

但是,我怀疑何时可以手动实例化用@InjectMocks注释的字段,即

@InjectMocksA a = new A();

什么时候依靠MockitoAnnotations.initMocks()功能来做同样的事情:

@InjectMocksA a;

这取决于我们用来运行测试用例的JunitTestRunner还是依赖于Mockito框架版本?

解决方法:

这取决于你是否正在使用(声明)跑步者.

如果你使用跑步者,你不需要自己调用MockitoAnnotations.initMocks() – 跑步者会为你调用它.

通常我们会选择跑步者.但是当你想要使用其他跑步者时(比如Spring),你可以自己调用.initMocks().

为了清楚起见,MockitoAnnotations.initMocks(this)将:

>实例化使用@InjectMocks注释的字段
>创建使用@Mock注释的每个字段的模拟版本
>在@InjectMocks变量的字段中注入@Mocks(或调用其构造函数或使用其setter – 它取决于您使用的依赖注入类型)

Mockito运行器,initMocks和规则代码示例

下面的三个代码示例应该是等效的.

有跑者:

第一个片段使用了转轮,无需调用initMocks().

@RunWith(MockitoJUnitRunner.class)public class MyClassTest {    @Mock private MyDependency myDependency;    @InjectMocks private MyClass myClass;    @Test    public void myClass_should_get_stuff_from_dependency() {        when(myDependency.getStuff()).thenReturn("stuff!");        assertThat(myClass.getDependencyStuff(), is("stuff!"));    }}

没有跑步者手动调用.initMocks():

另一个不使用runner,因此需要setUp()方法调用我们的initMocks()朋友.

// notice there is no runnerpublic class MyClassTest {    @Mock private MyDependency myDependency;    @InjectMocks private MyClass myClass;    // but now you have to call initMocks() yourself    @Before    public void setUp() throws Exception {          MockitoAnnotations.initMocks(this);    }    @Test    public void myClass_should_get_stuff_from_dependency() {        when(myDependency.getStuff()).thenReturn("stuff!");        assertThat(myClass.getDependencyStuff(), is("stuff!"));    }}

没有跑步者或手动呼叫,使用@Rule:

最后,正如comments (thanks @StefanBirkner)中所指出的那样,自版本1.10.17起,还有可能使用名为MockitoRuleJUnit @Rule

public class MyClassTest {    @Rule    public MockitoRule rule = MockitoJUnit.rule();    @Mock private MyDependency myDependency;    @InjectMocks private MyClass myClass;    @Test    public void myClass_should_get_stuff_from_dependency() {        when(myDependency.getStuff()).thenReturn("stuff!");        assertThat(myClass.getDependencyStuff(), is("stuff!"));    }}
来源:http://www.icode9.com/content-1-210351.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++小坑一枚:new和deletee未配对使用的后果
VS2015 编译生成C#的DLL文件,并调用
代码高亮很有用,特别是在需要在网站或者blog中显示自己编写的代码的时候,或者给其他人查看或调试语法错误的时候。我们可以将代码高亮,以便阅读者可以十分方便的读取代码块,增加用户阅读代码的良好体验。
Java 对 Domino Objects 的访问,第 1 部分
标准的函数注释格式
在PowerDesigner中,把Comment注释列给调出来,等于SQL SERVER中的字段说明。
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服