のための実行可能なユニットテストだと思う誰もがそのfooのコールバーをチェックしたい、なぜ私はかなり理解していません。
Fooにはいくつかの機能があり、この機能をテストする必要があります。 fooがこれを行うためにbarを使用しているなら、私の心配ではないはずです。
foo(msg)
が呼び出された後に、msg.upper()
がstdoutに送信されるという結果が得られます。
redirect stdout to a string bufferこの文字列バッファの内容が期待どおりであるかどうか確認してください。
例:
import sys
import unittest
from io import TextIOWrapper, BytesIO
class TestScript(unittest.TestCase):
def setUp(self):
self._old_stdout = sys.stdout
sys.stdout = TextIOWrapper(BytesIO(), sys.stdout.encoding)
def _output(self):
self._stdout.seek(0)
return self._stdout.read()
def test_foo(self):
hello_test = HelloTest()
hello_test.foo("blub")
self.assertEqual(self._output(), "BLUB")
def tearDown(self):
sys.stdout = self._old_stdout
self._stdout.close()
ます。また、標準入力のために(といくつかの入力を模擬するために標準入力に書き込む)ことを行うことができます、あなたが行われるために特別な何かを必要とする場合は、非Unicodeテキストを許可するように、TestIOWrapperをサブクラス化することができますsys.stdout.buffer
(Python 2 vs. Python 3)を使用せずにsys.stdout
に送信されます。 その例はthis SO answerです。 (まだ)Python 2のみを使用している場合は、StringIO
を使用する方がioモジュールを使用するよりも良いかもしれません。
+1: '模擬(mock) 'へのポインタです。 –
もし、彼がPython 3の下で何かを使っているのであれば、印刷を模倣するのは簡単ではありません。彼はsys.stdoutをモックすることができましたが、バーを変更する必要があります – aychedee