【问题标题】:Integration test in Spring application using Flowable使用 Flowable 在 Spring 应用程序中进行集成测试
【发布时间】:2019-04-12 08:16:00
【问题描述】:
我需要使用 Flowable 为我的 Spring 应用程序编写一些集成测试。我的测试必须包含应用程序 BPMN 工作流逻辑。
我的问题是——我是否应该像在应用程序中那样在测试期间启动和部署普通的 Flowable 引擎?在official documentation 中,我看到一些Flowable 类为单元测试准备,但没有用于集成。
在运行 IT 期间启动真正的 Flowable 引擎不会导致性能问题吗?如果我需要在每个测试中分别运行它,我担心它们会花费很长时间。您如何在您的应用程序中处理这个问题?
【问题讨论】:
标签:
java
spring
activiti
flowable
【解决方案1】:
如果你问我,那么你绝对应该在测试期间启动并部署一个普通的 Flowable 引擎。您从文档中粘贴的链接是您进行测试的确切方式。请记住,您可以使用自己的配置,不需要特殊的 Spring 配置来进行测试。
在测试期间启动真正的 Flowable 引擎不会导致任何性能问题。 Flowable 存储库中的所有测试实际上都是在单个测试中创建和销毁引擎的测试,而且速度非常快。在您的情况下,它会更快,因为您不会为每个测试启动引擎(Spring 应用程序上下文在测试之间缓存)。我还必须注意,即使每次测试都启动引擎,时间也可以忽略不计,因为启动引擎非常快。
请记住,Spring 应用程序中的其他组件可能会减慢测试的启动速度。
作为flowable-spring 模块中的参考,在 28 个测试类中有 76 个测试,其中每个测试类都有自己的 Spring 配置,这意味着测试之间没有 Spring 上下文重用。所有这些测试在我的本地机器上需要 55 秒。对于这些测试,您需要考虑到一些测试正在测试一些复杂的场景,其中异步执行器正在运行并且比通常花费更多的时间。你很可能不会有这样的测试。禁用这些特定测试(3 个测试类中的 3 个)后,测试时间会缩短到 28 秒。
注意:如果您没有使用 @Deployment 或者您依赖 Flowable 的自动部署功能,请确保您删除了您在测试中创建的实例。这将确保来自一个测试的数据不会影响来自另一个测试的数据。