如何进行风暴拓扑的单元测试?

时间:2016-03-23 17:00:00

标签: java apache-storm

我一直在开发风暴拓扑,但是我仍然发现我缺乏一种正确的单元测试方法来测试已经创建的螺栓和喷口,而无需启动拓扑并发送自己的流量。 拓扑中使用的服务是分开的并且经过单元测试,但是它们的使用或拓扑结构仍然存在错误(元组不正确,等等)。 在我的项目中创建单元测试以解决此问题的方法是什么? 感谢。

2 个答案:

答案 0 :(得分:0)

为螺栓创建单元测试有点复杂,但可以而不部署拓扑。 您可以创建一个实现IOutputCollector的测试类 和另一个实现元组的测试类。 你应该实现你使用的方法,并可能存储发出的元组。

之后,您可以使用以下代码创建螺栓的单元测试。

MockOutputCollector c = new MockOutputCollector();
Bolt b = new Bolt();
b.prepare(c,null,null);
MockTuple tuple = new MockTuple(fields,Arrays.aslist({"a,b,c"}));
b.execute(tuple);
List result = c.getEmittedTuples().get(0);

答案 1 :(得分:0)

我不知道你正在进行的处理的复杂性但是测试一个螺栓的简单方法是创建另一个在execute方法中对元组内容进行断言(使用你最喜欢的测试框架)的bolt

class AssertOutput extends BaseOperation implements Function {

        private AssertOutput() {
        }

        @Override
        public void execute(final TridentTuple tuple, final TridentCollector collector) {

            final List<Object> values = new ArrayList<>();

            for (final Object obj : tuple.getValues()) {
                values.add(obj);
            }
        }
}

因此,在单元测试中,您可以通过使用AssertOutput bolt调用每个方法来轻松检查螺栓的输出。

这是我知道自动检查元组内容的唯一方法。