java inject例子_java – 手动实例化@InjectMock带注释的字段
我已經(jīng)瀏覽了一些博客,以了解Mockito注釋如何工作的基礎(chǔ)知識.
但是,我懷疑何時可以手動實例化用@InjectMocks注釋的字段,即
@InjectMocks
A a = new A();
什么時候依靠MockitoAnnotations.initMocks()功能來做同樣的事情:
@InjectMocks
A a;
這取決于我們用來運行測試用例的JunitTestRunner還是依賴于Mockito框架版本?
解決方法:
這取決于你是否正在使用(聲明)跑步者.
如果你使用跑步者,你不需要自己調(diào)用MockitoAnnotations.initMocks() – 跑步者會為你調(diào)用它.
通常我們會選擇跑步者.但是當(dāng)你想要使用其他跑步者時(比如Spring),你可以自己調(diào)用.initMocks().
為了清楚起見,MockitoAnnotations.initMocks(this)將:
>實例化使用@InjectMocks注釋的字段
>創(chuàng)建使用@Mock注釋的每個字段的模擬版本
>在@InjectMocks變量的字段中注入@Mocks(或調(diào)用其構(gòu)造函數(shù)或使用其setter – 它取決于您使用的依賴注入類型)
Mockito運行器,initMocks和規(guī)則代碼示例
下面的三個代碼示例應(yīng)該是等效的.
有跑者:
第一個片段使用了轉(zhuǎn)輪,無需調(diào)用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!"));
}
}
沒有跑步者手動調(diào)用.initMocks():
另一個不使用runner,因此需要setUp()方法調(diào)用我們的initMocks()朋友.
// notice there is no runner
public 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:
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
總結(jié)
以上是生活随笔為你收集整理的java inject例子_java – 手动实例化@InjectMock带注释的字段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中使用什么来实现异常捕捉_P
- 下一篇: mysql类似的数据库_MemSQL学习