【发布时间】:2014-09-05 01:08:51
【问题描述】:
所以我一直在发布单元测试问题,因为我正在努力解决这些问题。我会尽量说清楚。下面我有一个嵌套的 if 语句,我想模拟 difficulty 变量的输入,并在满足条件时检查标准输出。
这是我的运行代码..
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()
【问题讨论】:
-
如果您运行的是 3.4,
contextlib.redirect_stdout是一种更简洁的重定向标准输出的方式——不再尝试/最终变得丑陋。即使您使用的是 3.3,如果您发现自己在这样的测试中经常这样做,您可能希望将这样的上下文管理器添加到您的工具箱中。
标签: python unit-testing if-statement nested