如何对包含I / O文件的Netty处理程序进行单元测试?

时间:2019-02-18 06:38:59

标签: c# unit-testing mocking moq netty

我正在写入文件的channelhandleradapter中的

我知道如何使用EmbeddedChannel对Netty处理程序进行单元测试, 但是当我们在其中处理文件I / O(ChannelRead)时如何对这个处理程序进行单元测试?类似于模拟,没有I / O文件依赖性。

public class LogHandler : ChannelHandlerAdapter
   {

       const string Path = @"L:\Log.txt";
        public override void ChannelActive(IChannelHandlerContext context)
        {
            base.ChannelActive(context);
        }

        public override Task WriteAsync(IChannelHandlerContext context, object message)
        {
            Logger.SentLog(message as IByteBuffer);
            return context.WriteAsync(message as IByteBuffer);
        }

        public override void ChannelRead(IChannelHandlerContext context, object message)
        {

            string msg = Convertor.ByteBufferToString(message as IByteBuffer);
            IByteBuffer initialMessage = Unpooled.Buffer(1024);
            byte[] messageBytes = Encoding.UTF8.GetBytes(msg);
            initialMessage.WriteBytes(messageBytes);


            using (StreamWriter writer = new StreamWriter(Path, true))
            {
                writer.WriteLine($"(Read){System.DateTime.Now} -> {BitConverter.ToString(messageBytes).Replace("-"," ")}");
            }

            if (msg != "Timeout")
            {
                base.ChannelRead(context, message);
            }

        }
}

2 个答案:

答案 0 :(得分:1)

您的课程取决于StreamWriter课程。您需要以这样的方式更改您的类,以便您从调用方提供这些依赖关系,并可以在单元测试中对其进行模拟。因此,您可以为StreamWriter实例化创建一个简单的包装器类,在您的类中使用该包装器类,然后将其注入构造器/每个设置器中。然后在您的单元测试中设置模拟,以返回本地StreamWriter,您可以使用该using (MagickImage image = new MagickImage(files[i])) { image.Format = MagickFormat.Jpeg; image.Write(MyFile.ReplaceFileExtension(files[i], "jpg")); } 来验证写入的内容。

答案 1 :(得分:0)

您仍然可以使用from imblearn.under_sampling import RandomUnderSampler #Random under-sampling and over-sampling with imbalanced-learn def random_under_sampling(X,Y): rus = RandomUnderSampler(return_indices=True) X_rus, y_rus, id_rus = rus.fit_sample(X, Y) print('Removed indexes:', id_rus) plot_2d_space(X_rus, y_rus, 'Random under-sampling') 。只需使用EmbeddedChannel并验证它是否返回writeInbound(...)。然后,一旦您调用false,请验证文件中写入的内容。