前言 该文档是我在团队中负责集成测试模块时为团队成员编写的 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() 方法。