python - 如何模拟没有为 Python 单元测试设置类属性的参数的函数?
问题描述
我的类 Foo 有一个不带参数的计算方法,调用数据库并使用类属性进行一些计算,并设置另一个类属性calculation_results(它是一个字典)。
我正在尝试模拟一个单独的函数,其中包括对 Foo.calculate() 的调用。
我尝试了类似下面的方法,其中 mock_calculate 是我的测试类中定义的一个函数:
def mock_calculate():
pass
@mock.patch("path.Foo.validate", new=mock_calculate)
@mock.patch("path.Foo")
def test_func_that_calls_foo(self, mock_foo):
mock_foo.return_value.calculation_results = {first_calc : 1, second_calc: 2, database_mismatches : []}
func_that_calls_foo(#TEST_INPUT)
#assertions
这段代码确实设置了calculation_result 属性,但它仍然调用了实际的计算函数,当它尝试访问数据库时该函数失败了。如何直接设置 Foo.calculation_results 而不实际调用 calculate()?calculate() 不接受参数或返回任何东西的事实使得很难遵循我看到的大多数模拟示例——否则我可以只设置一个 return_value 或者在函数内部根据传递的参数设置属性。
解决方案
推荐阅读
- python - 如果已使用 Python 将文件加载到内存中,如何跳过加载文件?
- typescript - 交叉点类型上不存在属性
- python - python pytest-parallel上的多线程错误
- vba - 使 VBA 执行在 Mac 中编译的二进制文件
- python - Pandas 按窗口范围分组
- arcore - ARCore 增强图像跟踪质量
- python - ModuleNotFoundError:没有名为“tensorflow.keras.layers.pooling”的模块
- awk - 替换子字符串中的引号(最好没有外部依赖)
- ajax - Ajax:单击“无法设置属性‘值’为空”时更新文本字段值
- wordpress - Wordpress Gatsby.js 在 graphql staticQuery 中获取 databaseId