2016-03-23 112 views
3

我一直在開發風暴拓撲,但是我仍然發現我缺乏一種正確的單元測試方式,可以在不需要啓動拓撲併發送自己流量的情況下創建螺栓和噴口。 拓撲結構中使用的服務是分開的,並進行了單元測試,但它們的使用情況或拓撲結構(元組不正確等)仍然存在錯誤。 爲了解決這個問題,在我的項目中創建單元測試的方法是什麼? 謝謝。如何做風暴拓撲的單元測試?

+0

聽起來對我來說更像是你不是在談論單元測試,而是關於下一步 - 集成測試。 – Gimby

+0

嗯,我做了添加集成測試,它幫助了很多:)但它很慢,對我來說像檢查我的topo是否正確和每個污點發送/處理一個正確的元組可以單元測試的基礎知識,但我不知道什麼是最好的辦法。可能與Mockito,但我希望有更好的東西。 – Orpheo

回答

0

創建螺栓的單元測試有點複雜,但可能不需要部署拓撲結構。 您可以創建一個測試類來實現IOutputCollector 和另一個實現Tuple的測試類。 你應該實現你使用的方法,並可能存儲發射的元組。

之後,您可以使用以下代碼創建螺栓的單元測試。

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); 
0

我不知道你的是做加工的複雜性,但用於測試螺栓一個簡單的方法是創建一個又一個的螺栓那些斷言(使用自己喜歡的測試框架)上的元組內容執行方法。

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螺栓調用每個方法來輕鬆檢查螺栓的輸出。

這是我知道自動檢查元組內容的唯一方法。