久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

用補丁模擬兩個函數以進行單元測試

Mocking two functions with patch for a unit test(用補丁模擬兩個函數以進行單元測試)
本文介紹了用補丁模擬兩個函數以進行單元測試的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有一個要單元測試的函數包含調用其他兩個函數.我不確定如何使用補丁正確地同時模擬這兩個函數.我在下面提供了一個例子來說明我的意思.當我運行nosetests時,測試通過了,但我覺得必須有一種更清潔的方法來做到這一點,我并不真正理解關于f.close()的文章......

I have a function I want to unit test contains calls two other functions. I am unsure how can I mock both functions at the same time properly using patch. I have provided an example of what I mean below. When I run nosetests, the tests pass but I feel that there must be a cleaner way to do this and I do not really Understand the piece regarding f.close()...

目錄結構如下:

program/
  program/
    data.py
  tests/
    data_test.py

數據.py:

import cPickle

def write_out(file_path, data):
    f = open(file_path, 'wb')
    cPickle.dump(data, f)
    f.close()

data_test.py:

data_test.py:

from mock import MagicMock, patch

def test_write_out():
    path = '~/collection'
    mock_open = MagicMock()
    mock_pickle = MagicMock()
    f_mock = MagicMock()
    with patch('__builtin__.open', mock_open):
        f = mock_open.return_value
        f.method.return_value = path
        with patch('cPickle.dump', mock_pickle):
            write_out(path, 'data')
            mock_open.assert_called_once_with('~/collection', 'wb')
            f.close.assert_any_call()
            mock_pickle.assert_called_once_with('data', f)

結果:

$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.008s
OK

推薦答案

您可以通過使用補丁裝飾器并像這樣嵌套它們來簡化測試(默認情況下它們是 MagicMock 對象):

You can simplify your test by using the patch decorator and nesting them like so (they are MagicMock objects by default):

@patch('cPickle.dump')
@patch('__builtin__.open')
def test_write_out(mock_open, mock_pickle):
    path = '~/collection'
    f = mock_open.return_value
    f.method.return_value = path

    write_out(path, 'data')

    mock_open.assert_called_once_with('~/collection', 'wb')
    mock_pickle.assert_called_once_with('data', f)
    f.close.assert_any_call()

MagicMock 實例的調用會返回一個新的 MagicMock 實例,因此您可以檢查返回的值是否像任何其他模擬對象一樣被調用.在這種情況下,f 是一個名為 'open()'MagicMock(嘗試打印 f).

Calls to a MagicMock instance return a new MagicMock instance, so you can check that the returned value was called just like any other mocked object. In this case f is a MagicMock named 'open()' (try printing f).

這篇關于用補丁模擬兩個函數以進行單元測試的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Python 3 Float Decimal Points/Precision(Python 3 浮點小數點/精度)
Converting Float to Dollars and Cents(將浮點數轉換為美元和美分)
What are some possible calculations with numpy or scipy that can return a NaN?(numpy 或 scipy 有哪些可能的計算可以返回 NaN?)
Python float to ratio(Python浮動比率)
How to manage division of huge numbers in Python?(如何在 Python 中管理大量數字的除法?)
mean from pandas and numpy differ(pandas 和 numpy 的意思不同)
主站蜘蛛池模板: 国产99久久久国产精品 | 在线不卡av | 在线视频成人 | 亚洲欧美日韩精品久久亚洲区 | 中文成人无字幕乱码精品 | 日韩视频一区二区 | 国产欧美日韩在线一区 | 香蕉视频黄色 | 日韩二 | 免费看黄色国产 | 国产一区电影 | 一区二区视频在线 | 国产精品伦理一区 | 九九免费观看视频 | 蜜桃特黄a∨片免费观看 | 一二三区视频 | 亚洲精品欧美一区二区三区 | 草久在线视频 | 一区二区三区四区免费视频 | 久久亚洲春色中文字幕久久久 | 中文字幕在线观看 | 美女一区二区在线观看 | 在线观看av网站永久 | 在线免费黄色 | 欧美久久一区 | 欧美亚洲日本 | 亚洲电影免费 | 日韩www | 国产精品久久久久久久久久久久 | 一区二区三区四区在线 | 成人午夜在线 | 亚洲精品美女视频 | 国产视频一区二区在线观看 | 日韩综合在线 | 日韩国产一区二区三区 | 欧美国产一区二区 | 日本一区二区三区在线观看 | 午夜一区 | 日本a在线 | 国产婷婷色一区二区三区 | 久久欧美高清二区三区 |