我正在開發一個名為 MTP 的自定義 TCP 協議的小客戶端 - 模因傳輸協議(但這無關緊要)......問題是我無法讓自己撰寫測驗,因為它看起來很無聊且毫無意義地耗時(在現實我知道,這一切都只是我的懶惰)。但是現在我的應用程式中有一個功能,我質疑它的行為,所以我想測驗它。
問題是我不知道怎么做,因為有一條線,函式從另一個輔助函式接收資料,它只是作為套接字通信的決議器(我使用 TCP 和 netstrings“加密”)字串。
任何人都可以就如何進行這種測驗給我建議/想法嗎?這對我來說真的很令人困惑,我本可以想到的潛在解決方案似乎非常困難,以至于根本不值得進一步思考。
(我沒有附上我的代碼,因為它很長,但我非常愿意按需分享)
uj5u.com熱心網友回復:
因此,正如評論中所提到的,如果您可以重構代碼并在構建時考慮到測驗,您的生活會容易得多。如果您無法重構代碼并且需要測驗您當前擁有的代碼,那么您可以考慮模擬/修補對另一個函式的呼叫。由于您沒有在下面顯示您的代碼,因此是一個示例。我有一個名為 StackOverflow.py 的檔案,它有兩個函式,foo和baz. foo 會呼叫 baz,baz 通常會要求用戶輸入并將其轉換為 int。在我們的測驗中,我們想模擬 baz 函式而不是等待用戶輸入。
在您的情況下,您可以將其視為您的 tcp 函式,而只是模擬它以回傳您想要的任何資料。在我的情況下 foo 接受一個數字并將其添加到 baz 回傳的任何數字中。我在嘲笑 baz 回傳一個亂數并檢查 foo 是否回傳我期望的。
from random import randint
def foo(num: int):
return baz() num
def baz():
return int(input("num: "))
def test_foo_baz_num_valid(mocker):
rand_num = randint(1, 100)
base_num = 10
baz_mock = mocker.patch("StackOverflow.baz")
baz_mock.return_value = rand_num
assert foo(base_num) == base_num rand_num
輸出
Testing started at 21:57 ...
Launching pytest with arguments StackOverflow.py --no-header --no-summary -q in C:\Users\cdoyle5\PycharmProjects\stackoverflow
============================= test session starts =============================
collecting ... collected 1 item
StackOverflow.py::test_foo_baz_num_valid PASSED [100%]
============================== 1 passed in 0.40s ==============================
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370982.html
