Моего SUT требует Stream
в качестве параметра, делает какую-то работу, а затем возвращает byte[]
:Глумления потока для чтения байт []
public byte[] ProcessRequest(INetworkStream networkStream)
INetworkStream
обручи Stream
.
Я хочу высмеять параметр Stream
, чтобы иметь контроль над тем, какие байты он читает, поэтому я могу протестировать метод с этими байтами.
stream.Read(buffer, offset, size);
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);
}
}
'INetworkStream' wraps' Stream' -> Это кажется странным, потому что 'INetworkStream' кажется интерфейсом, а' Stream' - это класс. Интерфейс не может быть получен из класса. Так что же здесь происходит? –
Я сказал, что обертывания не происходят. Он обертывает его ... –
Да, но это невозможно. Интерфейс - это просто определение контракта. Он не может обернуть что-либо, потому что нет реализации. –