我有两个类(class)
@Component
public class A {
@Autowired
B b;
}
@Component
public class B {
}
它们是通过 Spring 扫描找到的。
现在我想测试 A
,但我需要提供一个不同的 impl。 B
,说BMock
。
我怎样才能让 Spring 找到不同的 B
而不是标准的(只有一个在生产中)?
我的测试注释有:
@ContextConfiguration(locations = "classpath:/test-context.xml")
在哪个文件中定义了一些实例(DAO,..),然后在我写的测试类中
@Autowired
A testInstance;
最佳答案
您不需要 Spring。这就是依赖注入(inject)的全部要点:您可以在单元测试中明确地注入(inject)任何您想要的东西。单元测试不应使用 Spring。
// constructor injection
B mockB = mock(B.class);
A aUnderTest = new A(mockB);
或
// setter injection
B mockB = mock(B.class);
A aUnderTest = new A();
aUnderTest.setB(mockB);
或
// Field injection, requiring reflection, done by Mockito
@Mock
private B mockB;
@InjectMocks
private A aUnderTest;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
关于java - 更改在测试中注入(inject)的 @Component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522043/