给定这个类:
public SomeClass implements SomeInterface {
@Autowired private RemoteService rService;
}
并给出这个单元测试:
public SomeClassTest {
...
SomeClass sc = (SomeClass) ctx.getbean("someService");
..
}
我想用其他对象来 stub “rService”。我不想修改 SomeInterface
方法来公开任何 getter/setter,因为“rService”仅适用于一种实现。
最佳答案
除了通过测试中的 setter 注入(inject)重置 RemoteService
的 mock/stub 之外:
someClass.setRemoteService( remoteServiceMock );
(如果由于某种原因以上对你不起作用......)=> 你可以创建一个“test-config.xml”,你唯一要重新定义的 bean 是 remoteService
具有相同的(真实的)bean 名称,但具有 stub 实现,因此它可以覆盖真实的 bean:
<bean id="remoteService" class="org.your.package.remote.RemoteServiceStub"/>
RemoteServiceStub
将扩展 RemoteService
,因此它可以通过类型 Autowiring 到 SomeClass
然后在您的测试中,像往常一样注入(inject) SomeClass:
@ContextConfiguration(locations = { "classpath:/path/to/test-config.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class MyBeanTest {
@Autowired
private SomeClass someClass;
@Test
public void someClassShouldBehave() {
...
}
}
关于java - 注入(inject) stub 服务代替 Autowiring 的 bean 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7825992/