java - 使用服务层模拟创建 Controller 测试,该测试将运行实际容器(例如 tomcat,可能会更改 spring 上下文文件)

标签 java spring unit-testing

我有一个包含此层的应用程序

  1. 使用 Jersey 编写的资源( Controller /端点),
  2. 服务,我有服务接口(interface)及其实际实现。在资源中,我使用 @Autowired Spring 注释来设置服务接口(interface)及其实现实例/bean。

我想使用 Spring、JUnit、Mockito 等编写测试,它将运行 tomcat(或其他容器),然后模拟服务并运行测试。 我已经使用 stub 做到了,但我认为应该有一种不使用 stub 的方法。它正在运行灰熊,替换上下文来测试上下文(上下文不包括服务实现包,而不是使用 stub 包),将模拟服务设置到 stub 中,之后我可以模拟服务并像通常的单元测试一样测试端点。

知道如何在不使用 stub 的情况下做到这一点(在资源中直接插入模拟服务)吗?

最佳答案

如果您使用 Springs MockMvc,您可以调用 HTTP 端点并拥有对服务实例的完全访问权限。因此,您可以将服务注入(inject)到 JUnit 测试类中,并根据需要使用模拟来处理它们。 所以不需要启动tomcat,这使得测试速度更快,调试更容易。 这种方法要求您的端点是 Spring Controller 中带有 @RequestMapping 的方法,这与您现在使用的 Jersey 不同。 但我真的可以推荐它,效果很好。

关于java - 使用服务层模拟创建 Controller 测试,该测试将运行实际容器(例如 tomcat,可能会更改 spring 上下文文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35799465/

相关文章:

java - 如何在 web xml 中配置 servlet

java - 在eclipse中使用maven创建spring mvc项目

java - 如何忽略公共(public)资源(.js .css 文件)的 Servlet 过滤器

java - 配置 Activiti 以重用 Spring Boot 中现有的用户/组数据

java - Play 框架 - 如何模拟 render() 方法?

python - 如何正确使用单元测试的 assertRaises() 和 NoneType 对象?

java - 使用 java Deflater/Inflater 和字典有什么问题

java : better way of doing this than using if and else

spring - WSS4J 与 Spring WS : (WSSecurityEngine: Invalid timestamp The security semantics of the message have expired)

java - 为装饰器模式编写junit测试的tdd步骤