包含輸入輸出的 單元測試 Python unittest

提交一個小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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章