簡體   English   中英

你如何對tcp連接進行單元測試?

[英]How do you unit test for tcp connection?

我最近有機會為我的項目編寫一個簡單的tcp-client,由於我對tcp / ip的巨大無知,我很難讓它正常工作。

我發現有時候當tcp服務器關閉時連接被拒絕或者有時在調用receive時我可能會遇到異常時,我會遇到奇怪的連接問題。

由於tcp-server是一個黑盒子,我們無法訪問它,我想知道在這種情況下,為此編寫單元測試的最佳方法是什么?

我想要么我應該寫一個tcp-server並讓它返回某些輸入,就像我期望從真實服務器那樣,或者只是模擬與返回理想情況數據相關的函數。

我只是不喜歡這樣的事實:有時我可能會遇到奇怪的連接/接收問題而且我想知道如何正確編寫單元測試,我可以在將來重復使用/擴展以確保之前工作的所有內容仍然有效以防我的代碼或代碼發生變化。

謝謝

你應該有兩種測試:

  1. 集成測試 - 使用可以發送和接收連接的真正的裸骨TCP服務器。 創建具有最低功能的此服務器,並使用它來測試客戶端的行為方式。 使用簡單的TCP服務器,您可以測試客戶端如何發送和接收消息以及如何連接和斷開與服務器的連接。 另一個有用的測試是多個客戶端如何連接並向服務器發送消息。
  2. 單元測試 - 使用Mocking可以測試更復雜的場景。 您將無法發送或接收消息,但您可以測試客戶端的內部邏輯 - 如果兩個消息到達,如果出現錯誤則重新發送,它的行為方式等等。

使用這兩種測試,您應該能夠涵蓋大部分客戶的功能

對於單元測試,我創建一個簡單的套接字服務器(在UT啟動時啟動)只是為了測試客戶端。 如果你簡單而獨立,你將減少運行測試的麻煩。 您也可以使用像ncat這樣的工具來實現這一點。

然而,盡管如此,可能存在可能難以接受的問題。 Keepalive問題,可能是路由等外部問題。 但是如果你使用真正的偵聽套接字(而不是模擬連接),它就是真正的TCP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM