【发布时间】:2014-09-19 07:02:05
【问题描述】:
所以我遇到这个问题已经有一段时间了,找不到解决方案。我有这个非常基本的运行代码。当我使用 side_effects 模拟输入时,我想测试预期的输出 "TEST" 。第一次调用输入函数时,我模拟'y',然后在第二次调用时模拟'1',这应该会触发print 语句。问题是返回的输出是空的。我不知道发生了什么,但是当我手动运行 main 方法并输入输入时,我得到了预期的输出,所以我知道运行代码按预期工作,但是在测试期间发生了一些奇怪的事情。
这是我的运行代码
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 stdout 在你的情况下应该是空的吗?既然你输入了'y'(在你的补丁中),
difficulty='y'不符合 if 条件? -
我在使用
side_effects时编辑了我的代码(忘记更新),它修补了满足第一个if 语句的'y','1'应该满足第二个条件。 @阿什温
标签: python unit-testing mocking stdout