这里的问题:我有一个相当复杂的类乙,有很多在它定义的@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