2012-06-20 94 views
14

要寫unittest -cases對於這樣的一個功能:如何測試打印語句?

def test_me(a): 
    for b in c: 
     print do_something(a,b) 

起初我以爲只是關於收集的do_something輸出一個字符串,然後返回它,打印並一起測試整個輸出。但它並不總是方便,因爲這樣的循環可能會導致您的緩衝區字符串變得非常大,這取決於具體情況。那麼你能做什麼來測試輸出,當它被打印並且不被返回?

+1

幫助? http://stackoverflow.com/questions/5136611/capture-stdout-from-a-script-in-python –

+1

使用'yield'語句? –

+0

@上述評論:我不知道什麼是單元測試的典型方法,兩者都有可能。 – erikbwork

回答

12

print打印到sys.stdout,如果您願意,您可以將其重新分配給自己的對象。你的對象唯一需要的是一個write函數,它接受一個字符串參數。

由於Python 2.6,您還可以通過將from __future__ import print_function添加到腳本頂部,將print更改爲函數而不是語言結構。這樣你可以用你自己的功能覆蓋print