所以我一直有這個問題一段時間,找不到解決方案。我有這個運行代碼,這是非常基本的。我想測試預期的輸出,"TEST"
,當我用side_effects
來模擬輸入。第一次輸入函數被稱爲我模擬'y'
,然後我第012次模擬'1'
它被調用,然後應該觸發print
聲明。問題是返回的輸出是空的。我不知道發生了什麼,但是當我手動運行main方法並輸入輸入時,我得到了預期的輸出,所以我知道運行代碼按預期工作,但在測試過程中發生了一些奇怪的事情。在Python模擬輸入時輸出爲空單元測試
這裏是我的運行代碼
def main():
newGame = input("")
if newGame == 'y':
print("1.Scallywag\n2.Crew\n3.Pirate")
difficulty = input("")
if difficulty == '1':
print("TEST")
main()
這裏是我的測試代碼
import unittest
from unittest.mock import patch
import io
import sys
from Run import main
class MyTestCase(unittest.TestCase):
@patch('builtins.input', side_effects=['y','1'])
def test_output(self,m):
saved_stdout = sys.stdout
try:
out = io.StringIO()
sys.stdout = out
main()
output = out.getvalue().strip()
self.assertIn("TEST", output)
finally:
sys.stdout = saved_stdout
if __name__ == "__main__":
unittest.main()
這裏是AssertionError
我回來與跟蹤一起回來,請注意其預期""
這不應該是這樣。
F
======================================================================
FAIL: test_output (__main__.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python33\lib\unittest\mock.py", line 1087, in patched
return func(*args, **keywargs)
File "C:\Users\jsalce\Desktop\Testcases\Test.py", line 20, in test_output
self.assertIn("TEST", output)
AssertionError: 'TEST' not found in ''
----------------------------------------------------------------------
Ran 1 test in 0.006s
FAILED (failures=1)
謝謝大家提前
isint標準輸出應該在你的情況下是空的?因爲你輸入'y'(在你補丁中),'難度='y'',這是否符合條件? – ashwinjv 2014-09-18 22:19:36
我編輯我的代碼(忘記更新),當我使用'side_effects'它補丁'y'滿足第一個if語句時,''1''應該滿足第二個條件。 @Ashwin – SalceCodec 2014-09-18 22:31:01