gpt4 book ai didi

python - 在 python 中使用 Mocking 进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:21 25 4
gpt4 key购买 nike

我的 python 文件中有两个函数。我想使用 Mock 对这些函数进行一些单元测试。

def col_rename(col_name):
reps = ((' ', '_&'), ('(', '*_'), (')', '_*'), ('{', '#_'), ('}', '_#'))
new_cols = reduce(lambda a, kv: a.replace(*kv), reps, col_name)
return new_cols

def rename_characters(df):
df_cols = df.schema.names
for x in df_cols:
df = df.withColumnRenamed(x, col_rename(x))
return df

上面的函数withColumnRenamedpyspark中的一个函数,它将在重命名列名称后返回一个列。df 是一个 pyspark 数据框。

我能够对 col_rename 函数进行单元测试

我可以通过在 pyspark 中手动创建数据帧来对 rename_characters 函数进行单元测试

现在我想在python中使用Mock进行单元测试

我尝试过下面这样的事情。我不确定这是正确的还是我所做的完全错误

import unittest
from mock import patch

class Test(unittest.TestCase):
@patch('mymodule.rename_characters')
def test_func(self, rename_characters_mock):
rename_characters_mock.return_value = 'mocked values'
self.assertEqual(return_value, 'mocked_values'))

如何为上述场景中的单元测试进行模拟

最佳答案

你可能需要这个

import mymodule

外部测试类定义本地函数

def local_rename_characters():
return 'mocked_local_values'

这应该有效

@patch('mymodule.rename_characters')
def test_func(self, rename_characters_mock):
rename_characters_mock.return_value = 'mocked values'
self.assertEqual(mymodule.rename_characters(), 'mocked_values')

使用side_effect的替代方案

@patch('mymodule.rename_characters')
def test_func(self, rename_characters_mock):
rename_characters_mock.side_effect = local_rename_characters
self.assertEqual(mymodule.rename_characters(), 'mocked_local_values')

关于python - 在 python 中使用 Mocking 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49290594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com