Python pytest mock assert_调用_,类函数失败
我计划使用pytest和pytest mock来验证Python代码。作为一个新手,编写了一个示例代码来验证类上的mock并看到失败。我想知道出了什么问题 src/main.pyPython pytest mock assert_调用_,类函数失败,python,unit-testing,mocking,pytest,Python,Unit Testing,Mocking,Pytest,我计划使用pytest和pytest mock来验证Python代码。作为一个新手,编写了一个示例代码来验证类上的mock并看到失败。我想知道出了什么问题 src/main.py class Main(object): def __init__(self, my_var=None): self.var = my_var def internal_func(self, var=10): my_var = var + 20 retur
class Main(object):
def __init__(self, my_var=None):
self.var = my_var
def internal_func(self, var=10):
my_var = var + 20
return my_var
def test_func(self):
val = self.internal_func(20)
return val + 40
测试/测试_main.py
import pytest
from pytest_mock import mocker
from src.main import Main
def new_func(cls, *args, **kwargs):
return 2
def test_main_mock(mocker):
mocker.patch.object(Main, 'internal_func')
val = Main().test_func()
assert Main.internal_func.assert_called_with(20)
它失败,出现以下错误
======================================================================================== FAILURES ========================================================================================
_____________________________________________________________________________________ test_main_mock _____________________________________________________________________________________
mocker = <pytest_mock.MockFixture object at 0x7f34f490d8d0>
def test_main_mock(mocker):
mocker.patch.object(Main, 'internal_func')
main = Main()
val = main.test_func()
# assert val == 80
> assert Main.internal_func.assert_called_with(20)
E AssertionError: assert None
E + where None = <bound method MagicMock.wrap_assert_called_with of <MagicMock name='internal_func' id='139865418160784'>>(20)
E + where <bound method MagicMock.wrap_assert_called_with of <MagicMock name='internal_func' id='139865418160784'>> = <MagicMock name='internal_func' id='139865418160784'>.assert_called_with
E + where <MagicMock name='internal_func' id='139865418160784'> = Main.internal_func
tests/test_main.py:13: AssertionError
======================================================================================================================================================失败========================================================================================
_____________________________________________________________________________________测试主模拟_____________________________________________________________________________________
嘲弄者=
def测试主模拟(模拟):
mocker.patch.object(Main,“internal_func”)
main=main()
val=main.test_func()
#断言值==80
>assert Main.internal函数assert函数调用(20)
断言错误:断言无
E+其中无=(20)
E+where=.assert_调用_
E+其中=Main.internal_func
tests/test_main.py:13:AssertionError
在修补函数生效之前,必须设置返回值或副作用
def test_main_mock(mocker):
# mock internal_func of class Main
mocked_internal_func = mocker.patch.object(Main, 'internal_func')
# assign return_value or side_effect
mocked_internal_func.return_value = -10
# class instance
ma = Main()
val = ma.test_func()
assert ma.internal_func.assert_called_with(20)
更正错误,断言不应与assert\u一起使用,称为\u with
,它们是独立的断言
仍然是相同的错误>assert ma.internal_func.assert_called_with(20)E AssertionError:assert None E+where None=(20)E+where=.assert_called_with E+where=.internal_funcomocker=def test_main_mock(mocker):m=mocker.patch.object(main,'internal_func')m.return\u value=-10 ma=Main()val=ma.test\u func()>assert ma.internal\u func.assert\u调用了带有(20)E AssertionError:assert的None@suri,你是对的,我把2个断言混在一起了,这就是它失败的原因
assert val == 30
mocked_internal_func.assert_called
ma.internal_func.assert_called_with(20)
mocked_internal_func.assert_called_with(20)