我正在使用Pytest测试一个类,我想验证(最好是通过.assert\u调用\u with())我希望传递到我正在检查的函数中的一个参数是特定的对象类型。我遇到的问题是.assert\u调用的\u with()似乎只能验证基元类型参数(字符串、int等)。对于那些熟悉.NET Mocking库MOQ的人,我想做如下工作:
mockedSomething.Verify(x=>;x、 mockedSomethingsFunction(It.IsAny())
这是针对我正在使用TDD设计的pythonweb应用程序。使用pythonversion3.7.1,pytest和pytest模拟包
一级测试:
class Foo():
def __init__(self, proxy, htmlBuilder):
self._htmlBuilder = htmlBuilder
self._proxy = proxy
def default(self):
userData = self._proxy.get_the_data_object()
return self._htmlBuilder.build_html(userData, True)
测试功能:
import pytest
def test_this_is_the_test(mocker):
#assemble
user = User()
mocker.patch.object(Proxy, 'get_the_data_object')
Proxy.get_the_data_object.return_value = user
mocker.spy(HtmlBuilder, 'build_html')
#act
Foo.default()
#assert
assert HtmlBuilder.build_html.assert_called_with(user, True)
我希望我在修补程序(user)中返回的对象是发送到.build\u html(user arg1,Bool arg2)函数中的对象,我的assert将通过。但是测试失败了,这是pytest在我像在代码示例中那样断言时写出的输出(user,True):
E AssertionError: assert None
E + where None = <bound method wrap_assert_called_with of <MagicMock name='build_html' id='140017474442688'>>(<Foo.Models.Foo.User object at 0x7f585bd39b00>, True)
E + where <bound method wrap_assert_called_with of <MagicMock name='build_html' id='140017474442688'>> = <MagicMock name='build_html' id='140017474442688'>.assert_called_with
E + where <MagicMock name='build_html' id='140017474442688'> = HtmlBuilder.build_html
当我省略如下用户参数时:
assert HtmlBuilder.build_html.assert_called_with(True)
然后我运行测试,测试失败了,但是这次pytest的输出暗示了我一开始的想法:
E AssertionError: Expected call: build_html_for_default_route(True)
E Actual call: build_htmle(<Foo.Models.Foo.User object at 0x7f20c0b0fc18>, True)
E
E pytest introspection follows:
E
E Args:
E assert (<Foo...0x7f20c0b0fc18>, True) == (True,)
E At index 0 diff: <Foo.Models.Foo.User object at 0x7f20c0b0fc18> != True
E Left contains more items, first extra item: True
E Full diff:
E - (<Foo.Models.Foo.User object at 0x7f20c0b0fc18>, True)
E + (True,)
目前没有回答
相关问题 更多 >
编程相关推荐