我们正在使用 cucumber-jvm 在我们的应用程序中编写集成测试层。我们发现的挑战之一是管理测试和 Web 应用程序之间的数据库。
一个典型的场景是,我们希望在场景的给定步骤中持久化一些实体,然后在用户界面上执行一些操作,这些操作反过来可能会持久化更多实体。最后,我们要清理数据库。因为 cucumber-jvm 测试在一个 jvm 中,而 Web 应用程序在另一个 jvm 中运行,所以我们不能共享事务(至少以我知道的方式),所以必须手动清理数据库。
我最初的想法是在与 cucumber-jvm 测试相同的 JVM 中使用嵌入式内存数据库 (HSQLDB) 运行的嵌入式 Tomcat 服务器。通过这种方式,我们可以共享一个 spring 容器,并且通过扩展一个事务,可以从中检索所有对象。
在我的初始测试中,Spring 似乎被加载和配置了两次:一次是在测试开始并读取 cucumber.xml 时,第二次是在嵌入式 tomcat 启动并且 Web 应用程序读取其 applicationContext.xml 时。这些似乎在两个完全独立的容器中,因为如果我尝试在一个容器中解析另一个容器中指定的对象,那么它不会解析。如果我复制我的配置,那么我会收到有关具有相同 ID 的重复 bean 的错误。
有没有一种方法可以告诉 Spring 为我的测试应用程序和嵌入式 tomcat 使用相同的容器?
我正在使用 Spring 3.2.2.GA 和 Embedded Tomcat 7.0.39(两个库的最新版本)。
我疯了吗?我需要提供更多技术细节吗?抱歉,如果我使用了一些不正确的术语。
谢谢
ps 如果您对我的问题很熟悉,并且您可以建议我正在尝试的解决方案的替代解决方案,请告诉我!