gpt4 book ai didi

python-3.x - 使用 pytest 对包含某个类的实例的某个函数进行单元测试

转载 作者:行者123 更新时间:2023-12-04 16:45:40 25 4
gpt4 key购买 nike

考虑模块 some_module.py具有以下内容(在我的实际用例中,SomeClasssome_function 在单独的模块中定义):

class SomeClass:
def __init__(self, v):
self.some_attr = v

def some_method(self):
self.some_attr += self.some_attr


def some_function(val):
c = SomeClass(val)
c.some_method()
return c
假设我已经对 SomeClass 进行了单元测试使用 pytest .现在我要单元测试 some_function .我的理解是我应该 mock 与 SomeClass 相关的所有内容。 .我尝试的是将以下测试函数添加到 some_module.py :
def test_some_function(mocker):
# arrange
c = mocker.MagicMock()
c.some_attr = 10

mocker.patch('some_module.SomeClass', return_value=c)
mocker.patch('some_module.SomeClass.some_method')

# act
c = some_function(10)

# assert
assert c.some_attr == 20
运行 pytest some_module.py在终端中(显然)导致测试失败 c.some_attr是 10. 测试函数应该是什么样的?

最佳答案

在您的示例中,由于 SomeClass已经测试成功,自 some_function 的目的似乎只是返回一个 SomeClass 的实例其中some_method已被调用一次且仅一次,模拟它没有意义(如果可能,最好是 avoid mocks)。
因此,我建议您测试some_function像这样:

from some_module import SomeClass, some_function


def test_some_function():

c = some_function(10)
assert isinstance(c, SomeClass)
assert c.some_attr == 20

c = some_function(-10)
assert isinstance(c, SomeClass)
assert c.some_attr == -20

c = some_function(0)
assert isinstance(c, SomeClass)
assert c.some_attr == 0

关于python-3.x - 使用 pytest 对包含某个类的实例的某个函数进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69481486/

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