我有一个storm拓扑,它有一个连接到kafka队列的spout,并将元组转发到我的bolt进行处理。我只想对螺栓进行单元测试,而不是kafka -> spout -> bolt的整个代码段。但是,我还想在storm拓扑实例中测试螺栓,而不仅仅是它的纯功能。原因是螺栓实际上将处理后的数据发送到cassandra数据库。
因此,我实现这一点的一种方法是制作一个测试管口,将其连接到螺栓,然后通过测试管口将测试元组发送到螺栓。然而,对于测试来说,这似乎是太多的工作。有没有更好的方法来做这件事?比如在测试中劫持原始端口来发送一些测试元组?
发布于 2018-02-10 21:15:54
您可能会考虑使用https://storm.apache.org/releases/0.9.6/javadocs/backtype/storm/testing/FixedTupleSpout.html或https://storm.apache.org/releases/0.9.6/javadocs/backtype/storm/testing/FeederSpout.html替换您的Kafka spout进行测试。
使用FixedTupleSpout进行测试的一个好处是它实现了https://github.com/apache/storm/blob/a4afacd9617d620f50cf026fc599821f7ac25c79/storm-client/src/jvm/org/apache/storm/testing/CompletableSpout.java,因此可以与completeTopology https://github.com/apache/storm/blob/64e29f365c9b5d3e15b33f33ab64e200345333e4/storm-server/src/main/java/org/apache/storm/Testing.java#L405一起使用。这可以让您编写测试,最初设置一些元组,运行拓扑直到所有元组都被确认/失败,然后允许您断言,例如,数据已写入Cassandra,所有元组都已被确认。
这里有一个在https://github.com/xumingming/storm-lib/blob/master/src/jvm/storm/TestingApiDemo.java#L83中使用completeTopology的例子。
https://stackoverflow.com/questions/48712824
复制相似问题