這裏的問題:我有一個相當複雜的類乙,有很多在它定義的@Inject
(其中一類Ç)。這個類的一個實例被注入到另一個類A,我想要測試它。 這個想法是,我想注入B類的模擬到A - 我希望它被Spring注入,以便在實例創建後執行init方法(因此沒有@InjectMock
這裏有替代注射劑)。測試春:避免注射到嘲笑的對象與
Here's an example that is boiled down to three classes Bla, Blub and Blublub。我想要做的是模擬Blub並將此實例注入到BlubBlub - 我想忽略Bla的存在。
* 編輯 *
主要的一點是,我希望有一個背景下由類咕嚕咕嚕的模擬和類BlubBlub的一個實例。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MockInjectionTest.TestApp.class)
public class MockInjectionTest {
@Inject
public Blub blub;
@Inject
public BlubBlub blubblub;
@Configuration
public static class TestApp {
@Bean
Blub getBlub() {
return mock(Blub.class);
}
@Bean
BlubBlub getBlubBlub() {
return new BlubBlub();
}
}
@Test
public void testBlub() {
Assert.assertNotNull(blub);
}
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
// the classes
public static class Bla {
}
public static class Blub {
@Inject
public Bla bla;
}
private static class BlubBlub {
@Inject
public Blub blub;
}
}
問題:當我或者通過使用@Mock
或致電模擬(泡殼),明確在@Bean方法我收到以下錯誤時ApplicationContext
被實例化(無論我定義咕嚕的模擬使用xml-config或基於註解的bean定義)。
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating
bean with name 'getBlub': Injection of autowired dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException:
Could not autowire field: public Bla Blub.bla;
所以顯然Spring仍然想要實例化原始類而不是僅僅使用我提供的實例。這是接下來創建上下文所必需的(如果我手動創建上下文,並使用已在上下文構建中轉儲的ctx.getBean()
來拉豆。
來自Guice我會簡單地將我的模擬實例綁定到模塊中,一切都會好的。
幫助非常感謝 - 聽起來像一個標準問題,但我找不到一個簡單的解決方案。
感謝和問候,弗裏克
這是一個遺憾,這一個沒有回答,我有同樣的問題 – john16384