java - 在 Spring Web 上下文中通过 Mock 对象覆盖 Autowiring 字段

标签 java spring mocking

我们有带有 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/

相关文章:

使用 Maven 的 Java 无法构建 : Cannot run program "cmd" "Malformed argument has embedded quote"

java - ssh客户端如何区分文本颜色

java - struts 2文件上传没有这样的方法异常

java - Spring MVC 的 junit 测试用例

c# - 单元测试 - 模拟 - 可覆盖的问题 - 扩展方法

java - linux用java直接输出到屏幕

java - 如何防止在catalina.out中重复记录到tomcat控制台?

java - 为什么在Spring中使用服务实现模式

python - 如何在 Python 中模拟使用 ctypes.byref 作为参数之一的 ctypes 函数

actionscript-3 - 如何在 ActionScript 3 中伪造 AsyncToken 返回