【发布时间】:2020-02-27 21:28:22
【问题描述】:
我正在尝试模拟类似于下面的 python 函数。我没有对模拟函数做任何事情,除了它用于在被调用函数中返回模拟数据。我是否可以避免将变量(在本例中为 sum)传递给测试函数?
# test_calculator.py
from unittest import TestCase
from unittest.mock import patch
class TestCalculator(TestCase):
@patch('calculator.Calculator.sum', return_value=9)
def test_sum(self, sum):
self.assertEqual(sum(2,3), 9)
【问题讨论】:
-
你到底想做什么?从查看
patch的文档来看,似乎期望 classes 作为输入,而不是函数。我错过了什么吗? -
我相信函数可以被模拟。这是我关注的示例 - semaphoreci.com/community/tutorials/…
-
你为什么要嘲讽什么?您在这里所做的只是测试您的模拟是否确实返回
9。也就是说,你写了一个更详细的self.assertEqual(9, 9)。 -
我没有时间在代码中进行测试,但是从补丁的文档看来,如果您不指定
new参数,那么您必须按照上述方式进行。如果您指定new参数(可能指向另一个类或函数),那么您可以跳过修饰函数签名中的第二个参数。我不知道你是否可以通过 lambda 指定这样一个新函数。
标签: python python-3.x pytest