我们有带有 Controller 的 Spring Web 层和带有 Autowiring bean/服务的服务的服务层。我们正在尝试通过 Web 层模拟服务来编写服务的集成测试用例。在测试用例中,我们创建了 WebAppContext 并将其部署在 jetty 服务器上。在我的测试用例中,我尝试从服务器获取上下文,并使用反射替换要由模拟对象模拟的服务。但问题是,由于所有这些都是延迟 Autowiring 的,当实际的 Autowiring 对象初始化时,我的模拟会被覆盖。
我们需要解决方案,在运行测试用例时用上下文中的模拟对象替换实际初始化的对象。
当我使用 getBean("beanName") 从上下文获取 bean 时,bean 中的所有 Autowiring 字段都为空,无论出于什么原因,我也从应用程序上下文中删除了“default-lazy-init”以避免懒惰正在加载。
看下面的代码,我在AccountService中有depositService和withdrawService。 当我从 getBean() 获取“Accountservice”时,它会将这些 Autowiring 变量返回为 null,即 DepositService = null&withdrawService = null。
@service
public class AccountServiceImpl implements AccountService{
@autowired
private Depositservice depositService;
@autowired
private WithdrawService withdrawService;
}
最佳答案
您正在寻找的内容是由 Springockito 实现的项目。
您可以使用 XML 或注释轻松地将 bean 声明为模拟或 spy 。
但是,我建议您尽可能使测试成为常规单元测试,因为无论如何您都会使用模拟。
关于java - 在 Spring Web 上下文中通过 Mock 对象覆盖 Autowiring 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23655705/