Python 自带的 unittest 库可以用来写单元测试。
测试输入输出的解决方法是:
将标准输入输出定向到一个StringIO类(python3是 io.StringIO)。import unittestimport ioimport sysdef 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()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()