我試圖單元測試一個類;爲了簡潔起見,我們將其稱爲Apple。它有一個需要AppleManager bean的@Required setter。 AppleManager本身具有@Required setter,而不是AppleStorageClient bean。我嘲笑AppleManager並注入到蘋果,但我也需要使用真正 AppleManager類檢索使用其AppleStorageClient對象方法的數據。我如何通過Spring/Mockito實現這一目標?在Mockito單元測試中使用帶@Required字段的類
測試:
public class AppleTest {
@InjectMocks
private Apple apple;
@Mock
private AppleManager appleManager;
?????
private AppleManager realAppleManager;
//I tried = new AppleManager() here but the object is null...
//ostensibly because Spring doesn't know I want to use the bean
//also tried @Autowired to no avail
@Before
public void doBeforeStuff() {
MockitoAnnotations.initMocks(this);
}
...
}
來源:
public class Apple {
private AppleManager appleManager;
@Required
public void setAppleManager(AppleManager appleManager) {
this.appleManager = appleManager;
}
....
}
&
public class AppleManager {
private AppleStorageClient appleStorageClient;
@Required
public void setAppleStorageClient() {
this.appleStorageClient = appleStorageClient;
}
...
}
謝謝,馬克!我在提供上下文的測試類的超類中有一個ContextConfig,但是我發現它缺少定義AppleStorageClient bean的.xml。有了這個說法,根據你的解釋,似乎對我來說重做我目前的「測試」實施更有意義,所以我會放棄它。 –
@Mark Bramnik:只要使用相同的上下文並且不使用DirtiesContext註釋,Spring上下文將只加載一次。也許還有其他限制(https://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html) – slowy