2017-02-24 30 views
3

我有一個函數foo(..),它使用'print'打印大量消息。我想編寫單元測試來測試打印消息的正確性。如何獲取打印的消息而不是將其打印在控制檯中。測試函數的打印行爲

例如

def foo(x): 
    print("Value is ", x) 

assertEqual(OUTPUT(foo(5)), "Value is 5") 

回答

3

你可以嘲笑sys.stdout如在unittest.mock.patch()的例子發現:

from io import StringIO 
from unittest.mock import patch 

def foo(): 
    print('Something') 

@patch('sys.stdout', new_callable=StringIO) 
def test(mock_stdout): 
    foo() 
    assert mock_stdout.getvalue() == 'Something\n' 

test() 
+0

看起來很完美。讓我測試一下 – ArmanHunanyan

+0

工作。感謝幫助。 – ArmanHunanyan