前言 该文档是我在团队中负责集成测试模块时为团队成员编写的 API 接口文档,这次拿过来修改了一下,并已经将业务无关的代码剥离出来上传到 GitHub 上。主要是向大家展示一种流畅接口设计框架代码的模式。
所谓流畅接口,可以参考我之前翻译的 Martin Flower 的博客译文 。简单来说,流畅接口被设计为可读的 和流式的 ,使用起来几乎和自然语言一般流畅,并且配合 IDE 的智能提示,易于 API 使用者的理解和使用。譬如下面我编写的集成测试用例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class InboundToOutboundExampleJobTest extends JobIntegrationTest { @Test public void should_send_ACTT_and_receive_trigger_event_from_kafka () { kafkaSuite.send(new ResourceFile("sample/send/pek/ACTT.xml" )) .toTopic() .ofConfig("inbound_imf" ); SubjectEvent event = kafkaSuite .await().latestOne() .fromTopic() .ofConfig("trigger" ) .toJavaObject(SubjectEvent.class); assertThat(event.getEventName()).isEqualTo("FLOP_ACTT" ); assertThat(event.getGids().size()).isEqualTo(1 ); assertThat(event.getGids().get(0 )).isEqualTo("PEK_80664162170310656" ); } }
代码读起来非常明了,KafkaSuite
是我编写的 Kafka 集成测试套件,负责将 xml 文件发送至 Kafka 的一个 Topic 中,该 Topic 配置在配置文件中,对应着 inbound_imf
项。同时 KafkaSuite
监听另一个 Topic trigger
的最新一条消息并转换成 Java 对象,对结果进行验证(其间过程 xml 文件会被其他模块解析并经过一系列的业务处理)。
上述代码中,assertThat().isEqualTo()
就是断言框架 assertj
的 API,它是一个非常优秀的流畅接口的框架,建议大家阅读其源代码。我在编写 Kafka 集成测试框架时就借鉴了这种编码模式。
集成测试 代码目前完成了 Kafka 集成测试的发送和监听功能。我们的流处理框架采用的是 Flink,将任务分解为一个个 Job 独立运行,所以集成测试首先得启动 Job,并且加载包括 Kafka IP地址等相关配置。为此我编写了 JobIntegrationTest
类,并规定所有集成测试用例必须继承该类。此外,KafkaSuite
是负责 Kafka 集成测试的套件,封装了各种流畅接口 API。
JobIntegrationTest 所有的集成测试必需继承 JobIntegrationTest 类,该类提供 final 的 setUp()
方法和 tearDown()
方法。