我知道如何使用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);
}
}
}
答案 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
,请验证文件中写入的内容。