通过TCP以一定间隔发送消息的设计模式和TDD

本文关键字:消息 设计模式 TDD TCP 通过 | 更新日期: 2023-09-27 17:58:33

我正试图在我最新的项目中使用TDD,但我在实现这一点时遇到了麻烦。

我需要每隔一段时间向TcpListener发送一条ping消息。我已经针对这个问题实现了TCP服务。到目前为止,TDD过程一切顺利。TcpService由控制整个程序流的引擎使用。

现在是我需要每隔几秒钟发送一条消息的部分。我的想法是创建另一个在内部使用定时器的服务,并向其注入TcpService,以便它能够通过TCP发送消息。

这是一个可行的解决方案吗?如果是,我该如何测试它?如果没有,有人能给我指正确的方向吗?

谢谢。

通过TCP以一定间隔发送消息的设计模式和TDD

一般来说,好的单元测试是简短、快速、不包含逻辑、不涉及IO、测试单个事物、在单个对象上断言、独立和可靠的。

被测试的单一事物被称为被测试系统(SUT)。SUT的所有依赖项都应该能够在测试期间进行配置。

在单元测试中尽量避免逻辑、IO和异步调用。这些往往会导致测试变得脆弱、不可靠和缓慢。我发现Roy Osherove的视频是TDD和单元测试的一个很好的起点。以下是Roy Osherove对单元测试的定义。

编写可测试代码需要一些时间来适应。一个好的起点是Bob叔叔的SOLID原则。我发现单一责任原则(SRP)、依赖倒置原则(DIP)以及不要重复自己原则(DRY)提供了最好的里程。

专注于编写执行系统核心逻辑的单元测试,一次只执行一小段逻辑。您实际上并不想在单元测试中测试网络是否工作,但您确实想测试连接两端的逻辑。

应避免在自动测试中使用计时器。你想了解计时器内部的逻辑。计时器会导致测试缓慢、不可靠。

如果你真的想测试网络连接,你实际上是在写一个集成测试。没有什么不应该这样做,但当你编写单元测试时,你的重点是核心逻辑。

您可能需要考虑使用Moq这样的嘲讽框架。这是一篇关于用NUnit和Moq编写单元测试的文章。您不需要使用mocking框架,因为您可以在单元测试中创建具体的实例,但最好知道您有选择。

创建TcpService实现的接口ScheduledTask。创建一个采用两个构造函数参数的Scheduler类:以毫秒为单位的interval和一个ScheduledTask。现在,您可以使用1毫秒的间隔和模拟ScheduledTask为Scheduler编写单元测试。