这是一个关于Java编写的Storm拓扑中如何对Bolts和Spouts进行单元测试的一般性问题。
在单元测试(JUnit?)中,对于测试 Bolts 和 Spouts,有哪些推荐的实践和指南?
例如,我可以为一个Bolt
编写一个JUnit测试,但如果没有完全理解框架(比如Bolt
的生命周期)和序列化的影响,就会很容易犯错,比如基于构造函数创建非可序列化成员变量。在JUnit中,这个测试会通过,但在拓扑中它将无法正常工作。我完全可以想象,需要考虑许多测试点(例如,这个示例中的序列化和生命周期)。
因此,是否建议在使用基于JUnit的单元测试时,运行一个小的模拟拓扑(LocalMode
?),并测试该Topoology下的Bolt
(或Spout
)的暗示合同?或者,是否可以使用JUnit,但前提是我们必须仔细模拟Bolt
的生命周期(创建它、调用prepare()
、mock一个Config
等)?在这种情况下,对于要测试的类(Bolt/Spout),有哪些通用的测试点需要考虑?
其他开发者在创建适当的单元测试方面做了什么?
我注意到有一个Topology测试API(请参见:https://github.com/xumingming/storm-lib/blob/master/src/jvm/storm/TestingApiDemo.java)。使用这个API,针对每个独立的Bolt
和Spout
建立“测试拓扑”,并验证Bolt必须提供的隐式合同(例如,它的Declared outputs)是否更好?
谢谢!