gpt4 book ai didi

python - 为什么我的测试通过时却出现了相互矛盾的断言?

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

我是 Python/Pytest 新手,我正在尝试理解模拟/修补。我目前正在向现有代码库添加测试,但在这些概念上遇到了很多麻烦。

我花了几个小时阅读文档(pytest、pytest-mock)、Github 问题、代码等。我还花了很多时间尝试理解我缺少的内容。

我准备了一个小示例项目来帮助展示我所看到的内容。

项目结构:

runner.py
mypkg
__init__.py
MyClass.py
my_test.py
tests
test_my_class.py

文件内容:

runner.py:

from mypkg import my_test

my_test.run()

mypkg/MyClass.py:

class MyClass:
test_var = None

def __init__(self, *args, **kwargs):
self.test_var = args[0]

def do_something(self):
self.do_something_else()

def do_something_else(self):
print('Something else')
print(self.test_var)

mypkg/my_test.py:

from .MyClass import MyClass

def run():
x = MyClass('test')
x.do_something()

测试/test_my_class.py:

from mypkg import my_test

def test_my_test(mocker):
mocker.patch('mypkg.my_test.MyClass')

my_test.run()
my_test.MyClass.assert_called_once_with('test')
my_test.MyClass.assert_not_called
assert my_test.MyClass.call_count == 1

my_test.MyClass.return_value.do_something.assert_not_called
assert my_test.MyClass.return_value.do_something.call_count == 1

print(my_test.MyClass.mock_calls)

问题在于,即使断言相互冲突,测试也能通过。我不明白 call_count 如何为 1 和 assert_not_called可以同时通过。我不确定我是否在错误的地方进行了修补或错误地执行了其他操作。

将模拟调用转储到 my_test.MyClass显示:[call('test'), call().do_something()] 。我不确定我错过了什么。

我正在使用 python 3.6.5、pytest 4.4.1 和 pytest-mock 1.10.4

最佳答案

这是一个方法。它应该被称为:

mock.assert_not_called    # does nothing useful 
mock.assert_not_called() # actually makes an assertion

关于python - 为什么我的测试通过时却出现了相互矛盾的断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769338/

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