Skip to content

Lab6 safe Refactoring#42

Open
slavik22 wants to merge 22 commits into
lenagrin:masterfrom
slavik22:lab6
Open

Lab6 safe Refactoring#42
slavik22 wants to merge 22 commits into
lenagrin:masterfrom
slavik22:lab6

Conversation

@slavik22
Copy link
Copy Markdown

Лаба 6 — Безпечний рефакторинг EchoServer під тести

Що зроблено

Рефакторинг:

  • Виділено ITcpListener інтерфейс + TcpListenerWrapperEchoServer більше не залежить від TcpListener напряму
  • HandleClientAsync зроблено public з параметром Stream замість TcpClient — метод тепер тестується з MemoryStream
  • Логер інжектується як Action<string> — прибрано пряму залежність від Console.WriteLine
  • Монолітний Program.cs (175 рядків, 2 класи) розбито на EchoServer.cs, UdpTimedSender.cs, Program.cs
  • Random перенесено з тіла callback у поле класу — усунуто зайвий new Random() на кожен виклик

Тести:

  • Новий проєкт EchoTcpServerTests з 13 юніт-тестами
  • EchoServerTests — lifecycle StartAsync/Stop, echo-логіка, скасування, обробка виключень стриму, логування підключення/відключення клієнта
  • UdpTimedSenderTests — захист від подвійного запуску, зупинка без старту, повторний старт після зупинки, lifecycle Dispose

Метрики до / після

Метрика До Після
Файлів у EchoTcpServer 1 5
Класів в одному файлі 2 1
Тест-проєктів для EchoServer 0 1
Юніт-тестів 0 13
Ін'єктованих залежностей EchoServer 0 2
Методів доступних для юніт-тестів 0 3
Пряма залежність від TcpListener так ні
Пряма залежність від Console так ні

Результат

Total tests: 13 Passed: 13 Failed: 0

slavik22 added 22 commits May 24, 2026 11:37
…for testability

- Add ITcpListener interface and TcpListenerWrapper to decouple TcpListener
- Extract EchoServer into EchoServer.cs with injected ITcpListener and logger
- Extract UdpTimedSender into its own file; move Random to field to avoid per-call allocation
- Make HandleClientAsync public and accept Stream for direct unit testing
- Reduce Program.cs to entry-point only
…r and UdpTimedSender

- EchoServerTests: StartAsync lifecycle, HandleClientAsync echo logic,
  cancellation, stream exception handling, client connect/disconnect logging
- UdpTimedSenderTests: double-start guard, stop without start, restart
  after stop, dispose lifecycle
@slavik22 slavik22 changed the title Lab6 Lab6 safe Refactoring May 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant