2017-10-31 10 views
0

unittestを作成していますが、メソッドの出力をテストしたいと思います。私のコードはちょっと大きいので少しの例を使用します。私の方法はこのように見えるとしましょう。別のクラスのメソッドの出力を取得してunittestでテストします

def foo(): 
    print "hello" 

私はunittestクラスに行き、私はこのようなunittestでコードを実行します。

def test_code(): 
    firstClass.foo() 

コンソールから取得する出力をテストします。私はsubprocessを使っている人がいるのを見ましたが、私は議論しかできません。だから私の質問は、私はunittestクラスでテストするために、コンソールから出力を得ることができます。

答えて

1

単純な解決策はremap stdout to a fileになり、ユニットテストクラス内でメソッドのファイルポスト実行を処理します。

import sys 
sys.stdout = open('result', 'w') 

test_code() 
# read 'result' 

編集:また、あなたがStringIOモジュールを使用して、ファイルストリームを操作することができます。

import StringIO 
output = StringIO.StringIO() 
sys.stdout = output 

例:働くかもしれないが、それは単なるテストですので、私は、ファイルを作成する必要はありません

#!remap.py 
import sys 
import StringIO 

backup_sys = sys.stdout # backup our standard out 
output = StringIO.StringIO() # creates file stream for monitoring test result 
sys.stdout = output 
print 'test' # prints to our IO stream 

sys.stdout = backup_sys # remap back to console 
print output.getvalue() # prints the entire contents of the IO stream 

出力

test 

More details on the module can be found here.

+0

まあ。 – Blinxen

+0

私はあなたのために役立つ代替メソッド、 'StringIO module'を追加しました。これは、ファイル書き込みメソッドをエミュレートし、 'print'関数を簡単に再マップできるようにします。 –

+0

ありがとうございました – Blinxen

関連する問題