Python:在单元测试期间尝试捕获输出时出现问题 - Unittest 库
Python: Problem trying catching an output during a unit test - Unittest library
我正在尝试捕获要测试的输出,我正在使用 unittest 和 unittest.mock 库。我已经查看了许多其他相关问题(例如:How to assert output with nosetest/unittest in python? 等),所有这些问题都在我的代码中提出了类似的问题,但我只得到一个空字符串,而且找不到我哪里搞错了。
我的函数做类似的事情:
def my_func():
a = int(input("put a 2 digit number"))
b = [1,2,3,4,5,6,7,8,9,0]
if a in b:
print("wrong number")
这是相关测试:
import io
import sys
import unittest
from unittest.mock import patch
from io import StringIO
from somemodule import my_func
def test_entering_wrong_value(self):
user_input = ['2']
with patch('builtins.input', side_effect=user_input):
self.my_func()
capturedOutput = io.StringIO()
sys.stdout = capturedOutput
output = capturedOutput.getvalue().strip()
self.assertEqual('wrong number', output)
据我所知,这应该捕获输出的字符串并与测试值进行比较,但无法捕获字符串,我只是得到一个空字符串和这个错误:
AssertionError: 'wrong number' != ''
我哪里搞砸了?
您必须在打印之前重定向 stdout
。您不能在之后重定向并期望获得未被重定向的 print
:
import io
import sys
import unittest
from unittest.mock import patch
from somemodule import my_func
def test_entering_wrong_value(self):
user_input = ['2']
with patch('builtins.input', side_effect=user_input):
capturedOutput = io.StringIO()
sys.stdout = capturedOutput
self.my_func()
output = capturedOutput.getvalue().strip()
sys.stdout = sys.__stdout__ # Restore stdout so prints work normally
self.assertEqual('wrong number', output)
我正在尝试捕获要测试的输出,我正在使用 unittest 和 unittest.mock 库。我已经查看了许多其他相关问题(例如:How to assert output with nosetest/unittest in python? 等),所有这些问题都在我的代码中提出了类似的问题,但我只得到一个空字符串,而且找不到我哪里搞错了。
我的函数做类似的事情:
def my_func():
a = int(input("put a 2 digit number"))
b = [1,2,3,4,5,6,7,8,9,0]
if a in b:
print("wrong number")
这是相关测试:
import io
import sys
import unittest
from unittest.mock import patch
from io import StringIO
from somemodule import my_func
def test_entering_wrong_value(self):
user_input = ['2']
with patch('builtins.input', side_effect=user_input):
self.my_func()
capturedOutput = io.StringIO()
sys.stdout = capturedOutput
output = capturedOutput.getvalue().strip()
self.assertEqual('wrong number', output)
据我所知,这应该捕获输出的字符串并与测试值进行比较,但无法捕获字符串,我只是得到一个空字符串和这个错误:
AssertionError: 'wrong number' != ''
我哪里搞砸了?
您必须在打印之前重定向 stdout
。您不能在之后重定向并期望获得未被重定向的 print
:
import io
import sys
import unittest
from unittest.mock import patch
from somemodule import my_func
def test_entering_wrong_value(self):
user_input = ['2']
with patch('builtins.input', side_effect=user_input):
capturedOutput = io.StringIO()
sys.stdout = capturedOutput
self.my_func()
output = capturedOutput.getvalue().strip()
sys.stdout = sys.__stdout__ # Restore stdout so prints work normally
self.assertEqual('wrong number', output)