2
我有一个春天豆这样如何创建一个春豆的“深”模拟?
@Component
public class Service extends AbstractService {
@Autowired
private OtherService otherService;
}
为了测试我创建了服务模拟
<bean id="serviceMock" class="org.easymock.EasyMock" factory-method="createMock" primary="true">
<constructor-arg index="0" type="java.lang.Class" value="com.pkg.my.Service"/>
</bean>
的模拟测试方面仍然需要我嘲笑所有的自动装配依赖。有没有办法创建“愚蠢的”模拟而不需要为所有的依赖创建bean?
两件事情,我不喜欢这个解决方案,你必须制定者添加到您的依赖关系,只是因为测试。当你想嘲笑像DB调用那样真正深入的东西时,它变得相当乏味,否则使用真正的bean(比如说你自动装载服务,使用其他服务,你使用其他服务等等,并且它以服务器结束调用哪一个是你想要模拟的唯一的东西,通过使用模拟bean作为主要的bean,你不必担心这一点)。 – terrmith
另外,如果我理解正确,如果我忘记创建bean,这将导致NPE。即使在测试之外。在这种情况下,我宁愿应用程序上下文失败。 – terrmith
@terrmith井取决于你如何编码你的真实代码,我总是添加setter注入,而不是属性注入,所以在我的情况下,我不需要修改setter的代码。如果你只想模拟一个像DB调用这样的深呼叫,那么这不是一个真正的单元测试,所以我认为你只想测试服务,而不是一个非常深的调用类。如果你不初始化其他服务属性,它会抛出一个NPE,所以如果你在春天的环境之外运行你的服务,它也会一样。 – gerardribas