提交一个小task,需要编写单元测试,百度了一下,多数以基础的函数为主,没有涉及到包含输入输出项的测试,找了好久才找到这个。由于没找到转载项,只好搬过来了,还望原主海谅。
import unittest
import io
import sys
def stub_stdin(testcase_inst, inputs):
stdin = sys.stdin
def cleanup():
sys.stdin = stdin
testcase_inst.addCleanup(cleanup)
sys.stdin = io.StringIO(inputs)
def stub_stdout(testcase_inst):
stderr = sys.stderr
stdout = sys.stdout
def cleanup():
sys.stderr = stderr
sys.stdout = stdout
testcase_inst.addCleanup(cleanup)
sys.stderr = io.StringIO()
sys.stdout = io.StringIO()
注:以下函数fun,为我们所要测试的内容载体,也可以是类或其他。只需要把对应的运行部分写到 单元测试类中 fun()的部分即可。
def fun():
x = int(input())
print(x+5)
class UnitTest(unittest.TestCase):
def test_fun(self):
stub_stdin(self, ‘2\n4\n’) # 依次输入2,4
stub_stdout(self)
fun()
self.assertEqual(str(sys.stdout.getvalue()), '7\n')
stub_stdout(self) # 重置输出
fun()
self.assertEqual(str(sys.stdout.getvalue()), '9\n')
if name == ‘main’:
unittest.main()