Netty單元測試總覽

2018-08-08 10:45 更新

我們已經(jīng)了解過了,為了能夠構(gòu)建 ChannelPipeline 的處理邏輯,可以將 ChannelHandler 實(shí)現(xiàn)串聯(lián)在一起。之前我們也解釋過了,支持有可能存在的復(fù)雜的分解處理成小的和可以重用的組件,其中的每一個定義良好的處理任務(wù)或步驟。本章將展示它簡化了測試。

Netty 的促進(jìn) ChannelHandler 的測試使用的是的所謂“嵌入式”傳輸。這是由一個特殊 Channel 實(shí)現(xiàn),EmbeddedChannel提供了一個簡單的方法通過管道傳遞事件。

這種想法很簡單:你把入站或者出站的數(shù)據(jù)寫入一個EmbeddedChannel 然后檢查是否能夠達(dá)到 ChannelPipeline 的結(jié)束。以此來確定消息編碼或解碼和 ChannelHandler 是否操作被觸發(fā)。

在表10.1中列出了相關(guān)方法。

名稱職責(zé)
writeInbound寫一個入站消息到 EmbeddedChannel。 如果數(shù)據(jù)能從 EmbeddedChannel 通過 readInbound() 讀到,則返回 true
readInbound從 EmbeddedChannel 讀到入站消息。任何返回遍歷整個ChannelPipeline。如果讀取還沒有準(zhǔn)備,則此方法返回 null
writeOutbound寫一個出站消息到 EmbeddedChannel。 如果數(shù)據(jù)能從 EmbeddedChannel 通過 readOutbound() 讀到,則返回 true
readOutbound從 EmbeddedChannel 讀到出站消息。任何返回遍歷整個ChannelPipeline。如果讀取還沒有準(zhǔn)備,則此方法返回 null
Finish如果從入站或者出站中能讀到數(shù)據(jù),標(biāo)記 EmbeddedChannel 完成并且返回。這同時(shí)會調(diào)用 EmbeddedChannel 的關(guān)閉方法

測試入站和出站數(shù)據(jù)

處理入站數(shù)據(jù)由 ChannelInboundHandler 處理并且表示數(shù)據(jù)從遠(yuǎn)端讀取。出站數(shù)據(jù)由 ChannelOutboundHandler 處理并且表示數(shù)據(jù)寫入遠(yuǎn)端。 根據(jù) ChannelHandler 測試你會選擇 writeInbound(),writeOutbound(), 或者兩者都有。

圖10.1顯示了數(shù)據(jù)流如何通過 ChannelPipeline 使用 EmbeddedChannel 的方法。

Figure%2010

Figure 10.1 EmbeddedChannel data flow

如上圖所示,使用 writeOutbound() 寫消息到 Channel,消息在出站方法通過 ChannelPipeline,之后就可以使用 readOutbound() 讀取消息。著同樣使用與入站,使用 writeInbound() 和 readInbound()。處在

每種情況下,消息是通過 ChannelPipeline 并被有關(guān)ChannelInboundHandler 或 ChannelOutboundHandler 進(jìn)行處理。如果消息是不消耗您可以使用 readInbound() 或 readOutbound() 適當(dāng)?shù)淖x到 Channel 處理后的消息。

讓我們仔細(xì)看一下這兩個場景,看看他們?nèi)绾芜m用于測試您的應(yīng)用程序邏輯。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號