我正在使用InjectMocks
和Spy
註釋來注入原型bean。如何在Mockito中注入原型bean
然而,注入Bean的行爲與單身bean相似。有沒有辦法在Mockito中注入一個原型範圍的bean?
我使用SpringJUnit4ClassRunner
運行JUnit,並且使用MockitoAnnotations.initMocks(this)
來初始化mock。
我正在使用InjectMocks
和Spy
註釋來注入原型bean。如何在Mockito中注入原型bean
然而,注入Bean的行爲與單身bean相似。有沒有辦法在Mockito中注入一個原型範圍的bean?
我使用SpringJUnit4ClassRunner
運行JUnit,並且使用MockitoAnnotations.initMocks(this)
來初始化mock。
這是因爲Mockito在編譯時創建了注入的對象。 如果你想要一個類似原型的行爲,你需要切換到使用答案。
例如,假設您的Spring應用程序有一個bean原型稱爲Foo和你的代碼做這樣的事情多次:
ctx.getBean("Foo");
因爲foo是一個原型,每一次的getBean()被調用時, Foo的新實例由Spring返回。
現在,在您的Mockito測試中,您嘲笑ctx以欺騙getBean()並返回您自己的預配置Foo實例。
,如果你設置你的測試像下面,不管有多少次你的代碼調用ctx.getBean(),富的同一實例將返回:
Foo foo = new Foo();
decorateFoo(foo);
when(ctx.getBean("Foo")).thenReturn(foo);
這是你如何實現原型在你的測試中的行爲:
when(ctx.getBean("Foo")).then(new FooAnswer());
private class FooAnswer implements Answer<Foo> {
@Override
public Foo answer(InvocationOnMock invocationOnMock) throws Throwable {
return new Foo(); // and configure as needed
}
}
我不從上下文獲取bean。我使用了Autowire註釋。 –
如果你使用@Spy,你的原型bean的哪個實例會被窺視,如果有多個?你聲明瞭一個變量,但希望它作爲幾個變量,我是否明白這一點? –
我使用間諜作爲依賴是私有變量。是的,我聲明瞭1個變量,並且我期待Mockito在每次引用時都注入bean的新實例。 –
沒有辦法做到這一點,我知道,當然期望手動。我懷疑這是在一個典型的mockito環境中的真正需求,在那裏你想調用'do ... when ...'或'verify'作爲間諜,如果'@ Spy'變量只是一些一種模板,而不是實際的間諜。 –