如何解决模拟来自外部类的数据库调用
我们公司建立了一个库,该库被我们当前正在为其创建测试的另一个项目(更确切地说是组件测试)用作外部依赖项。因此,我们的目标是让代码在所有pom.xml
依赖项的类中尽可能深地流动,而不需要网络调用。
我们要模拟所有外部依赖关系,并且不想从我们公司修改或派生这些库。
该库使用JNDI连接调用Oracle数据库。
该项目在Tomcat上运行,并且context.xml
建立了JNDI连接。最初,我们只是想在其中简单地注入一个H2连接,但是H2与Oracle并不直接兼容,并且要实现这一目标的工作量太大。其中有一个存储过程需要转换为Java函数(出于对H2兼容性的需求)。
是否有可能以某种方式拦截对数据库的调用,并返回我们将决定的内容呢?
我们正在研究的解决方案,但尚未了解如何使其发挥作用:
- 类似于MockServer / WireMock的工作方式。
- 弄清楚如何设置代理。
- 以某种方式注入与实际调用数据库的类不同的类。
我们使用Java 8,Spring 5(具有bean的XML配置)和Maven Cargo来启动Tomcat8。该库使用Java 8,Spring 4,并且与数据库建立连接的类不是Beans。
编辑:
有关测试设置的更多信息。
该项目有2个模块:一个用于服务本身(包含SOAP端点),另一个用于组件测试。
service
并不是以public static void main
开头的(即甚至没有通过Spring Boot上下文启动器启动)。
test
通过TestNg
类启动Cucumber
运行程序的测试套件。
因此,为了测试服务,我们触发了Maven Cargo以构建service
并将其部署在嵌入式Tomcat中,从而注入了特定于测试的context.xml
文件。然后,随后我们启动CucumberRunner,该CucumberRunner本身最终调用测试的端点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。