一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python如何測試stdout輸出

Python如何測試stdout輸出

2020-08-11 16:00D Python

這篇文章主要介紹了Python如何測試stdout輸出,幫助大家更好的理解和學習Python,感興趣的朋友可以了解下

問題

你的程序中有個方法會輸出到標準輸出中(sys.stdout)。也就是說它會將文本打印到屏幕上面。 你想寫個測試來證明它,給定一個輸入,相應的輸出能正常顯示出來。

解決方案

使用 unittest.mock 模塊中的 patch() 函數, 使用起來非常簡單,可以為單個測試模擬 sys.stdout 然后回滾, 并且不產生大量的臨時變量或在測試用例直接暴露狀態變量。

作為一個例子,我們在 mymodule 模塊中定義如下一個函數:

?
1
2
3
4
5
# mymodule.py
 
def urlprint(protocol, host, domain):
  url = '{}://{}.{}'.format(protocol, host, domain)
  print(url)

默認情況下內置的 print 函數會將輸出發送到 sys.stdout 。 為了測試輸出真的在那里,你可以使用一個替身對象來模擬它,然后使用斷言來確認結果。 使用 unittest.mock 模塊的 patch() 方法可以很方便的在測試運行的上下文中替換對象, 并且當測試完成時候自動返回它們的原有狀態。下面是對 mymodule 模塊的測試代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from io import StringIO
from unittest import TestCase
from unittest.mock import patch
import mymodule
 
class TestURLPrint(TestCase):
  def test_url_gets_to_stdout(self):
    protocol = 'http'
    host = 'www'
    domain = 'example.com'
    expected_url = '{}://{}.{}\n'.format(protocol, host, domain)
 
    with patch('sys.stdout', new=StringIO()) as fake_out:
      mymodule.urlprint(protocol, host, domain)
      self.assertEqual(fake_out.getvalue(), expected_url)

討論

urlprint() 函數接受三個參數,測試方法開始會先設置每一個參數的值。 expected_url 變量被設置成包含期望的輸出的字符串。

unittest.mock.patch() 函數被用作一個上下文管理器,使用 StringIO 對象來代替 sys.stdout . fake_out 變量是在該進程中被創建的模擬對象。 在with語句中使用它可以執行各種檢查。當with語句結束時,patch 會將所有東西恢復到測試開始前的狀態。 有一點需要注意的是某些對Python的C擴展可能會忽略掉 sys.stdout 的配置而直接寫入到標準輸出中。 限于篇幅,本節不會涉及到這方面的講解,它適用于純Python代碼。 如果你真的需要在C擴展中捕獲I/O,你可以先打開一個臨時文件,然后將標準輸出重定向到該文件中。

以上就是Python如何測試stdout輸出的詳細內容,更多關于Python測試stdout輸出的資料請關注服務器之家其它相關文章!

原文鏈接:https://python3-cookbook.readthedocs.io/zh_CN/latest/c14/p01_testing_output_sent_to_stdout.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 为什么丈夫插我我却喜欢被打着插 | 亚洲国产欧美另类 | 日韩精品首页 | 性趣味商品推荐 | 亚洲国产精品自产在线播放 | www.一区 | 2020韩国三级理论在线观看 | 欧美一级片在线视频 | 擦逼视频 | 婷婷丁香色综合狠狠色 | jk制服蕾丝超短裙流白浆 | 成人免费播放器 | 久久午夜夜伦痒痒想咳嗽P 久久无码AV亚洲精品色午夜麻豆 | 校园刺激全黄H全肉细节文 校草让我脱了内裤给全班看 | 亚洲国产欧美在线成人aaaa | 超级碰碰免费视频 | 色综合中文字幕天天在线 | 国产91网站在线观看 | 国产精品国产高清国产专区 | 波多野结衣中文字幕 | 美女毛片老太婆bbb80岁 | 国产在线98福利播放视频免费 | 双性少爷受糙汉攻h | 国产精品二区高清在线 | 国产1广场舞丰满老女偷 | 久久er国产免费精品 | 午夜影院小视频 | 边摸边吃奶玩乳尖视频 | 亚洲国产欧美在线人成 | 99热精品久久 | 日本一区二区三区在线 观看网站 | www.麻豆视频 | 欧美伊香蕉久久综合类网站 | 99热这里只有精品在线观看 | 日本中文字幕不卡在线一区二区 | 天天狠天天透 | 国产高清在线精品一区二区三区 | 欧美精品色精品一区二区三区 | 亚洲精品日韩专区在线观看 | 国产精品乱码高清在线观看 | 欧美日韩亚洲国内综合网香蕉 |