2014-09-01 87 views
0

我們想要模擬某些測試的Aggregators消息存儲,但我們無法找到如何將其注入到JUnit測試中。我們嘗試使用AggregatingMessageHandler而沒有成功。有沒有辦法做到這一點?模擬聚合器的消息存儲

在此先感謝

問候

古斯曼

編輯:

@Autowire 
private MessageHandler aggregator; 

@Test 
public test(){ 
    SimpleMessageStore store = new SimpleMessageStore(50) { 
    @Override 
    public MessageGroup addMessageToGroup(Object groupId, Message<?> message) { 
     if (simulateConnectionException) { 
     throw new SomeException("Foo"); 
     } 
     return super.addMessageToGroup(groupId, message); 
    } 
    aggregator.setMessageStore(store); 
    ... 
} 

回答

1

你爲什麼要嘲笑呢? SimpleMessageStore是一個基本的內存中的實現,您可以根據需要操作您的測試用例。

也就是說,嘲笑MessageGroupStore並將其提供給聚合器(通過XML名稱空間或直接提供)應該沒有問題。

但是,您將不得不檢查聚合器(和AbstractCorrelatingMessageHandler)以確定模擬的方法以及它們何時被調用。

因此,我關於它的說明更容易使用注入SimpleMessageStore;這是大多數框架測試所做的 - 參見AggregatorTests

編輯:

(見評論)。

我建議你做這樣的事......

private final SimpleMessageStore store = new SimpleMessageStore(50) { 

    @Override 
    public MessageGroup addMessageToGroup(Object groupId, Message<?> message) { 
     if (simulateConnectionException) { 
      throw new SomeException("Foo"); 
     } 
     return super.addMessageToGroup(groupId, message); 
    } 

}; 
+0

我們沒有失去消息的所有沿水流,所以我們要模擬的聚合器之間的連接,它的郵件存儲。在聚合器的某個隨機點上,我們想要拋出一個ConnectionException。我看起來前面AggregtorTests – gllambi 2014-09-02 13:37:36

+0

我用建議的技術編輯我的答案。 – 2014-09-02 13:44:06

+0

Gary,我嘗試了你的建議,但只能在我的JUnit中注入一個EventDrivenConsumer,我無法設置CustomMessageStore。我需要MessageHandler來做到這一點。我可以使用測試流定義一個自定義聚合器將其注入到我的測試中,但我不會測試真實流量。任何其他建議? – gllambi 2014-09-02 19:12:53