国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

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

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

Python如何測試stdout輸出

2020-08-11 16:00D Python

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

問題

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

解決方案

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

作為一個(gè)例子,我們在 mymodule 模塊中定義如下一個(gè)函數(shù):

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

默認(rèn)情況下內(nèi)置的 print 函數(shù)會(huì)將輸出發(fā)送到 sys.stdout 。 為了測試輸出真的在那里,你可以使用一個(gè)替身對象來模擬它,然后使用斷言來確認(rèn)結(jié)果。 使用 unittest.mock 模塊的 patch() 方法可以很方便的在測試運(yùn)行的上下文中替換對象, 并且當(dāng)測試完成時(shí)候自動(dòng)返回它們的原有狀態(tài)。下面是對 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() 函數(shù)接受三個(gè)參數(shù),測試方法開始會(huì)先設(shè)置每一個(gè)參數(shù)的值。 expected_url 變量被設(shè)置成包含期望的輸出的字符串。

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

以上就是Python如何測試stdout輸出的詳細(xì)內(nèi)容,更多關(guān)于Python測試stdout輸出的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品爱久久久久久久 | 成人欧美一区二区三区视频xxx | 欧洲免费视频 | 91精品国产91久久久久久吃药 | 美女88av| av中文在线播放 | www.日韩.com| 欧美日韩国产精品 | 国产精品99久久久久久动医院 | 午夜视频福利在线观看 | 成人免费视频网站在线观看 | 亚洲精品福利在线观看 | 久久久精品| 成人精品国产免费网站 | 欧美国产精品一区 | 91在线免费视频 | 亚洲精品一区在线观看 | 国产玖玖| 国产黄色小视频 | 在线免费看黄 | 精品国产乱码久久久久夜 | 久久午夜影院 | 国产999精品久久久久久麻豆 | 精品国产一区二区三区免费 | 一区二区在线 | 精精国产xxxx视频在线 | 欧美久久久网站 | 久久99综合久久爱伊人 | 国产在线精品一区 | 日韩在线成人av | 久久久久一区二区 | 成人在线| 久久99精品视频在线观看 | 国产农村妇女精品久久 | 欧美日韩激情一区二区三区 | 日韩一区二区三区在线播放 | 久久精品一级 | 欧美在线 | 亚洲 | 亚洲精品国精品久久99热 | 中文字幕在线电影观看 | 日韩欧美中文 |