foe*_*ens 2 c# unit-testing client-server stream
我有一些客户端代码使用我想测试的流与服务器通信.我想测试客户端将正确的命令发送到服务器.
为此,我创建了一个Connect方法,它接受两个流:一个是客户端读取的,另一个是客户端写入的.然后,我可以向两者提供MemoryStream,并读取客户端写入的MemoryStream发出的命令.
我的问题是我需要编写一个需要这两个流相同的方法.我也注意到,我唯一需要使用两个不同的流,就是当我想测试客户端时.因此,我想重构Connect方法只接受一个流,它将被写入和读取.
我无法将MemoryStream传递给此方法,因为write方法会写入一些内部字节数组,read方法也会从中读取.如果我将它提供给客户端,它将能够读取它刚刚发送的命令!
因此我会问什么流设置可以做到这一点?我只想要一个从一个源读取的流,但写入另一个源.我需要访问这两个源,以便"我的测试"服务器可以发送正确的命令响应,并读取客户端发送的命令.
本质上我需要两个流:S1和S2.一个流被提供给客户端,另一个流被提供给服务器.
S1的读取方法与S2的写入方法"连接"=> S1读取S2写入的内容.
S1的写入方法与S2的读取方法"连接"=> S2读取S1写入的内容.
这是客户端与服务器通信时的正常情况.在这里,我只想在记忆中做到这一点.我该如何编码呢?
为什么不抽象从命令传输中发送命令?
我的意思是你有一个类决定需要发送什么命令,另一个类决定了它们发送的方式.这样,您可以通过模拟传输类来测试命令类是否生成正确的命令(以正确的顺序),而无需担心流的实现细节.
然后,传输类的实现只需获取给它的数据,并将其直接写入通常的流,而不必考虑使其与命令类测试一起工作.那个类很难测试,但是到那时你已经建立了正确的命令,因此它进行了集成测试以确保它们被成功编写.