Python unittest 測試輸入(input)和輸出(print)


Python 自帶的 unittest 庫可以用來寫單元測試。

測試輸入輸出的解決方法是:
將標准輸入輸出定向到一個StringIO類(python3是 io.StringIO)。

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()


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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM