TI 對 Python 編程很陌生,并且對使用 Pytest 進行測驗有疑問。概括地說,我有一個程式,它接受 3 條用戶輸入并最終生成一個文本檔案。對于我的測驗,我想基本上比較我的程式輸出的檔案和它應該是什么。
現在,我不確定如何進行測驗。程式本身沒有引數,只是依賴于 3 條用戶輸入,我將使用monkeypatch 來模擬。我是否創建了一個名為 program_test.py 的新 python 檔案并在此處具有呼叫原始程式的方法?我已經嘗試過這個,但是我在實際呼叫原始程式和發送模擬輸入時遇到了麻煩。或者,我是否在原始程式中進行了測驗(這對我來說沒有多大意義)。
我想要這樣的東西:
import my_program
def test_1():
inputs = iter(['input1', 'input2', 'input3'])
monkeypatch.setattr('builtins.input', lambda x: next(inputs))
my_program
# now do some assertion with some file comparison
# pseudocode
assert filecompare.cmp(expectedfile, actualfile)
這似乎只是在運行原始程式,我認為它與匯入陳述句有關,即它從不運行 test_1(),可能是因為我從不呼叫它?任何幫助,將不勝感激!
uj5u.com熱心網友回復:
如果不提供您的my_program代碼,就很難知道發生了什么。
既然你提到了import問題,我猜你沒有定義main()和if __name__ == "__main__"。
這是一個關于如何測驗的小例子。
首先,組織你的my_program有main包含函式的代碼,然后添加if __name__ == "__main__"這將允許您運行main,如果該功能my_program是直接,但也執行進口my_program的模塊對其他檔案(不運行它,以獲取更多資訊,請參閱:如果什么名字==“主要”:做什么?)。
我的程式:
def main():
x = input()
y = input()
z = input()
with open("test", "w") as f_out:
f_out.write(f"{x}-{y}-{z}")
if __name__ == "__main__":
main()
現在您可以創建一個test.py檔案并測驗以下main功能my_program:
import os
import filecmp
import my_program
def test_success(monkeypatch):
inputs = ["input1", "input2", "input3"]
monkeypatch.setattr("builtins.input", lambda: next(iter(inputs)))
my_program.main()
with open("expected", "w") as f_out:
f_out.write("-".join(inputs))
assert filecmp.cmp("expected", "test")
os.remove("test")
os.remove("expected")
def test_fail(monkeypatch):
inputs = ["input1", "input2", "input3"]
monkeypatch.setattr("builtins.input", lambda: next(iter(inputs)))
my_program.main()
with open("expected", "w") as f_out:
f_out.write("something-else-test")
assert not filecmp.cmp("expected", "test")
os.remove("test")
os.remove("expected")
這是一個例子,所以我用來
os.remove洗掉檔案。理想情況下,您將在測驗中定義夾具以使用tempfile并生成隨機臨時檔案,這些檔案將在您的測驗后自動洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/372025.html
標籤:Python 蟒蛇-3.x 测试 pytest 猴子补丁
