TDD和MockingTcpClient人们如何处理mockingTcpClient(或类似TcpClient的东西)?我有一个接收TcpClient的服务。我应该把它包装成更可笑的东西吗?我应该怎么办?当遇到测试不友好的模拟类时(即密封/不实现任何接口/方法不是虚拟的),您可能需要使用适配器设计模式。在此模式中,您将添加一个实现接口的包装类。然后您应该模拟接口并确保所有代码都使用该接口而不是不友好的具体类。它看起来像这样:publicinterfaceITcpClient{StreamGetStream();//这里有你需要的任何东西}publicclassTcpClientAdapter:ITcpClient{privateTcpClientwrappedClient;publicTcpClientAdapter(TcpClientclient){wrappedClient=client;}publicStream(returnwrappedClient.GetStream();}}我认为@Hitchhiker走在正确的轨道上,但我也想考虑进一步抽象这样的事情。我不会直接模拟TcpClient,因为即使你已经编写测试,这仍然将您与底层实现联系得太紧密。也就是说,您的实现特别依赖于TcpClient方法。就个人而言,我会尝试这样的事情:[Test]publicvoidTestInput(){NetworkInputSourcemockInput=mocks.CreateMock();消费者c=新消费者(mockInput);c.ReadAll();//c.Read();//c.ReadLine();}publicclassTcpClientAdapter:NetworkInputSource{privateTcpClient_client;publicstringReadAll(){returnnewStreamReader(_tcpClient.GetStream()).ReadToEnd();}publicstringRead(){...}publicstringReadLine(){...}}publicinterfaceNetworkInputSource{publicstringReadAll();公共字符串读取();公共字符串ReadLine();此实现将完全为您提供与Tcp相关的详细信息(如果这是设计目标)分离,您甚至可以从硬编码值集或测试输入文件输入测试输入。如果您正在考虑从长远来看测试您的代码,这将非常有用。使用适配器模式绝对是解决问题的标准TDD方法。但是,您也可以创建TCP连接的另一端并让您的测试工具驱动。IMO对适配器类的广泛使用混淆了设计中最重要的部分,并且还倾向于从测试中删除很多真正应该在上下文中测试的东西。因此,另一种方法是构建您的测试以包含更多被测系统。如果你从头开始构建你的测试,你仍然可以将失败的原因隔离到给定的类或函数,它不会被隔离......有用并且需要更多了解C#学习教程,我希望大家多多付出关注吧——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
