净值:测试编码器/解码器
我最近與Netty進(jìn)行了一些合作,并且按照此出色的教程中的說明構(gòu)建了編碼器/解碼器管道,以測(cè)試編碼器和解碼器是否在正常工作而不必發(fā)送真實(shí)的消息。
幸運(yùn)的是,有一個(gè)EmbeddedChannel確實(shí)使我們的生活變得非常輕松。
假設(shè)我們有一條消息“ Foo”,我們想通過網(wǎng)絡(luò)發(fā)送。 它僅包含一個(gè)整數(shù)值,因此我們只需要發(fā)送該值并在另一側(cè)重建“ Foo”即可。
我們可以編寫以下編碼器來(lái)執(zhí)行此操作:
// Examples uses Netty 4.0.28.Final public static class MessageEncoder extends MessageToMessageEncoder<Foo> {@Overrideprotected void encode( ChannelHandlerContext ctx, Foo msg, List<Object> out ) throws Exception{ByteBuf buf = ctx.alloc().buffer();buf.writeInt( msg.value() );out.add( buf );} }public static class Foo {private Integer value;public Foo(Integer value){this.value = value;}public int value(){return value;} }因此,我們要做的就是從“ Foo”中取出“ value”字段,并將其放入要傳遞到下游的列表中。
讓我們編寫一個(gè)測(cè)試,該測(cè)試模擬發(fā)送“ Foo”消息并使用空的解碼器嘗試處理該消息:
@Test public void shouldEncodeAndDecodeVoteRequest() {// givenEmbeddedChannel channel = new EmbeddedChannel( new MessageEncoder(), new MessageDecoder() );// whenFoo foo = new Foo( 42 );channel.writeOutbound( foo );channel.writeInbound( channel.readOutbound() );// thenFoo returnedFoo = (Foo) channel.readInbound();assertNotNull(returnedFoo);assertEquals( foo.value(), returnedFoo.value() ); }public static class MessageDecoder extends MessageToMessageDecoder<ByteBuf> {@Overrideprotected void decode( ChannelHandlerContext ctx, ByteBuf msg, List<Object> out ) throws Exception { } }因此,在測(cè)試中,我們將“ Foo”寫入出站通道,然后將其讀回入站通道,然后檢查所獲得的內(nèi)容。 如果現(xiàn)在運(yùn)行該測(cè)試,將會(huì)看到以下內(nèi)容:
junit.framework.AssertionFailedErrorat NettyTest.shouldEncodeAndDecodeVoteRequest(NettyTest.java:28)我們返回的消息為空,這是有意義的,因?yàn)槲覀儾槐刭M(fèi)心編寫解碼器。 然后讓我們實(shí)現(xiàn)解碼器:
public static class MessageDecoder extends MessageToMessageDecoder<ByteBuf> {@Overrideprotected void decode( ChannelHandlerContext ctx, ByteBuf msg, List<Object> out ) throws Exception{int value = msg.readInt();out.add( new Foo(value) );} }現(xiàn)在,如果我們?cè)俅芜\(yùn)行測(cè)試,那就一切順利了。 現(xiàn)在,我們可以對(duì)一些更復(fù)雜的結(jié)構(gòu)進(jìn)行編碼/解碼,并相應(yīng)地更新測(cè)試。
翻譯自: https://www.javacodegeeks.com/2015/06/netty-testing-encodersdecoders.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的净值:测试编码器/解码器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 处处细留心的前一句是什么 处处细留心的前
- 下一篇: Apache Lucene的结构