1 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
您不需要為您正在做的事情打補(bǔ)丁(示例 A)。您正在傳遞參數(shù) c,您知道它是 BasicClass 的類,因此不需要補(bǔ)丁。如果您在您不希望實(shí)際發(fā)生的測(cè)試函數(shù)中引入了函數(shù)調(diào)用或?qū)ο蟪跏蓟?,您將需要一個(gè)補(bǔ)丁。
使用時(shí)@patch我們應(yīng)該使用 kwargside_effect來(lái)模擬異常的引發(fā),而不是調(diào)用其他函數(shù)。如果我們想模擬函數(shù)的返回值,請(qǐng)使用 kwarg return_value。如果我們只是想模擬一個(gè)函數(shù),那么我們只需使用@patch沒(méi)有任何 kwargs。當(dāng)我們使用補(bǔ)丁作為裝飾器時(shí),我們需要將它們傳遞給函數(shù)。確實(shí)可以不用它們,但我們應(yīng)該將它們與模擬函數(shù)一起使用,例如assert_called_once或assert_called_once_with以確保您的補(bǔ)丁按預(yù)期工作。請(qǐng)參見(jiàn)示例 B
==============示例A==================
import unittest
def my_basic_function(value, c):
return c(value).words()
class BasicClass:
def __init__(self, val):
self.val = val
def words(self):
return self.val
class TestMyBasicFunction(unittest.TestCase):
def test_my_basic_class(self):
value = my_basic_function("jeremy", BasicClass)
self.assertEqual("jeremy", value)
def test_my_basic_class_wrong(self):
value = my_basic_function("jeremy", BasicClass)
self.assertNotEqual("w33b", value)
============示例B======================
import unittest
from unittest.mock import patch
def ensure_str(value):
try:
return str(value)
except Exception:
raise TypeError
def my_basic_function(value, c):
value = ensure_str(value)
return c(value).words()
class BasicClass:
def __init__(self, val):
self.val = val
def words(self):
return self.val
class TestMyBasicFunction(unittest.TestCase):
@patch('script.ensure_str', return_value="jeremy")
def test_return_value(self, ensure_str_mock):
value = my_basic_function("jeremy", BasicClass)
ensure_str_mock.assert_called_once_with("jeremy")
self.assertEqual("jeremy", value)
@patch('script.ensure_str')
def test_no_return_value(self, ensure_str_mock):
value = my_basic_function("jeremy", BasicClass)
self.assertEqual(ensure_str_mock(), value)
@patch('script.ensure_str', side_effect=TypeError)
def test_side_effect(self, ensure_str_mock):
with self.assertRaises(TypeError):
value = my_basic_function({'apple': 'sauce'}, BasicClass)
ensure_str_mock.assert_called_once_with({'apple': 'sauce'})
添加回答
舉報(bào)