座敷牢日誌

都落ちした元SEがソフトウェアやネット関連のことを書いています

pythonのunittestで標準出力の結果をテストする

unittestモジュールで標準出力する関数をテストしようとした場合、どうしたらいいか調 べてみた。

例えば、次のような関数があったとする。実行すると標準出力に「hello」と出力する。

import sys
def testfunc():
    sys.stdout.write('hello')

この関数が期待通りに動くかunittestで確認するにはどうしたらいいか。標準出力をキャ プチャしてやればいいらしい。

unittestで標準出力をテスト - ワタリガラスの止まり木

import unittest
import StringIO
import sys

def testfunc():
    sys.stdout.write('hello')

class MyTestCase(unittest.TestCase):

    def setUp(self):
        u""" 標準出力ストリームをキャプチャする """
        self.capture = StringIO.StringIO()
        sys.stdout = self.capture

    def tearDown(self):
        u""" 標準出力ストリームを元に戻す """
        sys.stdout = sys.__stdout__

    def test_testfunc(self):
        testfunc()
        self.assertEqual('hello', self.capture.getvalue())

if __name__ == '__main__':
    unittest.main()