Я думаю, что @Hitchhiker находится на правильном пути, но я также хотел бы подумать об абстрагировании таких вещей на шаг вперед.
Я бы не стал издеваться над TcpClient напрямую, потому что это все равно слишком тесно связывало бы вас с базовой реализацией, даже если вы писали тесты. То есть ваша реализация связана конкретно с методом TcpClient. Лично я бы попробовал что-то вроде этого:
[Test]
public void TestInput(){
NetworkInputSource mockInput = mocks.CreateMock<NetworkInputSource>();
Consumer c = new Consumer(mockInput);
c.ReadAll();
// c.Read();
// c.ReadLine();
}
public class TcpClientAdapter : NetworkInputSource
{
private TcpClient _client;
public string ReadAll()
{
return new StreamReader(_tcpClient.GetStream()).ReadToEnd();
}
public string Read() { ... }
public string ReadLine() { ... }
}
public interface NetworkInputSource
{
public string ReadAll();
public string Read();
public string ReadLine();
}
Эта реализация полностью отделит вас от деталей, связанных с Tcp (если это является целью разработки), и вы даже можете передать данные тестового ввода из жестко закодированного набора значений или тестового входного файла. Очень хорошо, если вы находитесь на пути к тестированию своего кода на длительный период.