所以我一直在發佈單元測試問題,因爲我試圖讓他們很好。我會盡量做到儘可能清楚。下面我有一個嵌套的if語句,我想模擬difficulty
變量的輸入,並檢查stdout是否符合條件。嵌套if語句的Python單元測試
這裏是我的運行代碼..
def main():
print("''''''''''''''''''''''''''''''''''''")
print("''''''''''''''''''''''''''''''''''''")
print("''' \t\t\t\t '''")
print("''' \t\t\t\t '''")
print("''' \t Pirate Games\t\t '''")
print("''' \tStart a new game?\t '''")
print("''' \t\t\t\t '''")
print("''' \t\t\t\t '''")
print("''''''''''''''''''''''''''''''''''''")
print("''''''''''''''''''''''''''''''''''''")
newGame = input("").lower()
if newGame == "yes" or "y":
print("1.Scallywag\n2.Crew\n3.Pirate")
difficulty = input("Choose ye toughness!")
if difficulty == "1":
print("TEST")
elif newGame == "no" or "n":
print("Goodbye! Come Again")
else:
print("Enter correct input!")
現在,這裏是我的單元測試,但這只是對於第一個if語句,它工作正常。我不知道如何去做第二個。任何幫助表示讚賞,謝謝大家提前。
import unittest
from unittest.mock import patch
import io
import sys
from RunFile import main
class GetInputTest(unittest.TestCase):
@patch('builtins.input', return_value='yes')
def test_output(self,m):
saved_stdout = sys.stdout
try:
out = io.StringIO()
sys.stdout = out
main()
output = out.getvalue().strip()
self.assertEqual(output, "1.Scallywag\n2.Crew\n3.Pirate")
finally:
sys.stdout = saved_stdout
if __name__ == "__main__":
unittest.main()
,['contextlib.redirect_stdout '](https://docs.python.org/3.4/library/contextlib.html#contextlib.redirect_stdout)是一種更簡潔的方式,很好地重定向標準輸出 - 不會再嘗試/最後的醜陋。即使你使用的是3.3,如果你經常在這樣的測試中發現自己經常這樣做,那麼你可能需要將這樣的上下文管理器添加到你的工具箱中。 – roippi 2014-09-05 01:52:42