gpt4 book ai didi

python - 如何从外部模块模拟基类?

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

我正在尝试对从外部模块中的 base_class 派生的类进行单元测试。在我的开发/测试环境中,我无法访问此外部模块,这意味着我必须以某种方式模拟此基类。

我的测试代码与我尝试测试的代码驻留在不同的文件中。

问题可以概括如下:

my_class.py

import external_module

class MyClass(external_module.ExternalClass):
def test_method(self):
return "successful"

test_my_class.py

import sys
import unittest
from unittest.mock import MagicMock

sys.modules['external_module'] = MagicMock()

from my_class import MyClass

class TestMyClass(unittest.TestCase):
def test_first(self):
my_class = MyClass()
result = my_class.test_method()
self.assertEqual(result, "successful")

if __name__ == '__main__':
unittest.main()

结果

<小时/>

运行 test_my_class.py 时,结果如下。

AssertionError: <MagicMock name='mock.ExternalClass.test_method()' id='140272215184664'> != 'successful'

显然,由于 external_module 被模拟,甚至 MyClass 也成为模拟对象的实例。

类似帖子

<小时/>

该问题类似于Python mock: mocking base class for inheritance中描述的问题,但区别在于 base_class 来自外部模块。

偶数How to mock a base class with python mock library显示出与我的问题有一些相似之处,尽管解决方案不能直接应用。

尝试和失败

<小时/>

获取导入

import external_module

my_class.py 中工作

sys.modules['external_module'] = MagicMock()

需要在test_my_class.py中设置。

尽管如此,这会导致 external_module.* 成为模拟实例。

最佳答案

您可以创建一个辅助模块mocked_external_module,它可以从您的测试中导入,并且还包含一个类base_class。然后在测试代码中执行以下操作:

import mocked_external_module
sys.modules['external_module'] = mocked_external_module

此外,您需要模拟的 base_class 的每个方法都可以创建为 Mock 或 MagicMock。

关于python - 如何从外部模块模拟基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58629068/

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