Sam*_*ach 3 .net c# nunit moq mocking
我的SUT需要一个Stream参数,做一些工作,然后返回一个byte[]:
public byte[] ProcessRequest(INetworkStream networkStream)
Run Code Online (Sandbox Code Playgroud)
INetworkStream包裹Stream.
我想模拟Stream参数来控制它读取的字节,所以我可以用这些字节测试方法.
stream.Read(buffer, offset, size);
Run Code Online (Sandbox Code Playgroud)
Stream.Read(...)返回int并填充buffer参数.
使用Moq如何伪造调用的结果INetworkStream.Read(...)(所以我控制byte[]返回值的长度和buffer参数)?
该流包装:
public class FakeNetworkStream : INetworkStream
{
private NetworkStream stream;
public FakeNetworkStream(NetworkStream ns)
{
if (ns == null) throw new ArgumentNullException("ns");
this.stream = ns;
}
public bool DataAvailable
{
get
{
return this.stream.DataAvailable;
}
}
public int Read(byte[] buffer, int offset, int size)
{
return this.stream.Read(buffer, offset, size);
}
public void Write(byte[] buffer, int offset, int size)
{
this.stream.Write(buffer, offset, size);
}
}
Run Code Online (Sandbox Code Playgroud)
看起来你对你所链接的答案感到有些困惑.你现在有了一个界面INetworkStream.简单地嘲笑它.
无需使用NetworkStream或Stream在您的测试中(参考原始问题中的最后一位代码,它包含您要使用的代码.忽略已在问题上发布的答案.)
你会设置你的模拟类似的东西:
var stream = new Mock<INetworkStream>();
stream.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()))
.Callback((byte[] buffer, int offset, int size) =>
{
Array.Copy(tempBuffer, offset, buffer, 0, size)
}
)
.Returns((byte[] buffer, int offset, int size) => size);
Run Code Online (Sandbox Code Playgroud)
请注意,我不是Moq用户,所以我的语法可能有点偏,但它应该传达如何正确实现它的想法.
| 归档时间: |
|
| 查看次数: |
4493 次 |
| 最近记录: |