我正在使用flink stateful functions开发一个新项目。我已经使用FunctionTestHarness编写了一些基本的单元测试,但是使用此方法的测试无法测试有状态函数之间的交互。
flink测试文档(基本 flink,不适用于有状态函数)演示了如何使用作业的输出运行完整的作业MiniClusterWithClientResource
,然后对作业的输出进行断言。我正在寻找一种与有状态函数类似的方法。
statefun -flink-harness-example看起来很有希望,但是RunnerTest
using Harness标记为 ,@Ignore
因为它永远不会终止。这对于调试很有用,但不能用于自动化测试。
以下是我迄今为止发现的问题,这使得编写以Harness终止的测试变得困难:
- Harness使用SerializableSupplier来提供输入,而SerializableSupplier没有办法说它已经完成。这意味着任何使用Harness的测试总是在等待更多的输入。
- 如果Harness知道所有输入都已发送,那么一旦没有未决事件,它就需要一种终止方式。
- 作为一个额外的复杂因素,由于Context发送的延迟事件,一些系统仍然永远不会终止
.sendAfter()
我认为这将是实现更有趣的自动化测试的常见需求,这些自动化测试可以从 CI/CD 流程运行。有没有人找到解决上述问题的方法,或者使用Harness以外的工具发现了一种完全不同的方法?