2013-01-11 25 views
1

我有很長的一系列單元測試,我試圖解析爲一個文本文件,雖然我知道這可以用一些不同的調用unittest.main(),我有點呃,因爲我正在處理的代碼需要使用一個函數。這是目前寫成使用自定義函數將單元測試讀入python中的文件

unittest.TextTestRunner(verbosity=2).run(customFunction()) 

它的標準輸出是由另一個文件與

p = Popen(command, stdout=PIPE, stderr=STDOUT stdin=PIPE) 
result = p.communicate() 

# Write result to .txt file 

閱讀與此唯一的問題是,該方案將結果分配變量到控制檯輸出時掛起因單元測試必須調用的其他一些程序。我試圖重寫代碼,讓單元測試本身吐出到日誌文件(而不是解析控制檯輸出到文本文件),但我遇到了一些打嗝,用unittest.main( )由於必須提供自定義功能。有沒有人有關於如何去做這件事的任何建議或解決方案?

回答

3

我發現瞭如何自己做到這一點:有一個流選項,您可以使用TextTestRunner,它將單元測試的輸出指向您想要的任何文件對象。所以,如果你想要寫一個txt文件,你可以這樣寫:

logFile = open("C:/folder/logfile.txt", "w") 
unittest.TextTestRunner(stream=logFile, verbosity=2).run(customFunction()) 
logFile.close() 

只是想我會分享這個,這樣如果有人跑進了同樣的問題後,它們不運行到fustration我做到了。

+0

有沒有辦法將輸出重定向到日誌文件以及控制檯。您的示例將輸出重定向到日誌文件,並在控制檯上不顯示任何內容。 – Sumedh

+0

您是否嘗試過在問題中使用原始示例?如果你沒有和原文一樣的限制,你可以使用與我不得不使用的方法不同的方法。 –

1

當我們使用流中Python會是更好的爲問題代碼區捕手,並再次保證,我建議使用這樣的結構:

stream = open("...", "w") 
try: 
    unittest.TextTestRunner(stream=stream, verbosity=2).run(suite) 
finally: 
    stream.close() 

但在我看來,這捕手代碼是一個龐大而這樣寫起來更容易:

with open("...", "w") as stream: 
    unittest.TextTestRunner(stream=stream, verbosity=2).run(suite) 

也許有更好的風格?

相關問題