from checker.checker import check_board_state, check_row, check_winner,\
check_column, check_diagonal
import sys
import unittest
class TestChecker(unittest.TestCase):
def test_winner_row(self):
check_board_state([['o', 'x', '.'],
['o', 'o', 'o'],
['.', 'x', 'o']])
output = sys.stdout.getvalue().strip()
assert output == 'o'
def test_draw(self):
check_board_state([['.', 'x', '.', 'o', 'o'],
['o', 'o', 'x', '.', '.'],
['.', 'o', 'x', '.', '.'],
['.', 'o', 'x', '.', '.'],
['.', 'o', 'x', '.', '.']])
output = sys.stdout.getvalue().strip()
assert output == '.'
if __name__ == '__main__':
unittest.main()
check_board_state関数で印刷された値をテストしたいのですが、これらのテストに問題があります。私が代わりにPythonの実行のunittestモジュールはPythonを使用する場合Python 3.5 unittestで印刷された値をテストするには?
AttributeError: '_io.TextIOWrapper' object has no attribute 'getvalue'
テストはEclipseでPyDevはで正常に動作します:私は
python -m unittest tests.py
私が持っているエラーを使用してそれらを実行しようとします。どうすればこの問題を解決できますか?
あなたはそれではなく、標準出力にそれを印刷したものを返すようcheck_board_stateを変更したり、デフォルトはあなたが一種の[印刷](HTTPSのように、あなたのテストから渡すことができることをsys.stdoutにパラメータを追加することができます。 python3の関数 – solarc
'stdout'をテストできるバッファにリダイレクトする必要があります。 [これを見る](http://stackoverflow.com/questions/1218933/can-i-redirect-the-stdout-in-python-into-some-sort-of-string-buffer)また、 'unittest.TestCase'にある' assert'メソッドを使うと、より豊かで読みやすくなります。 – Dan