gpt4 book ai didi

java - 注入(inject) stub 服务代替 Autowiring 的 bean 进行单元测试

转载 作者:行者123 更新时间:2023-11-29 03:53:06 25 4
gpt4 key购买 nike

给定这个类:

 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com