我正在尝试学习python的测试工具,并设置了@patch()
的非常简单的用法。
我做了一个非常简单的函数,它什么也不做(但是也不会引发错误):
aULR = "https://example.com"
def getURL():
with urllib.request.urlopen(aULR) as f:
pass
然后我修补urlopen
并使用以下命令调用函数:
@patch('urllib.request.urlopen')
def test(MockClass1):
getURL()
assert MockClass1.assert_called_with('test')
test()
此操作失败,并带有我希望的断言错误:
AssertionError: Expected call: urlopen('test')
Actual call: urlopen('https://example.com')
但是当我在测试中通过以下正确的网址时:
@patch('urllib.request.urlopen')
def test(MockClass1):
getURL()
assert MockClass1.assert_called_with('https://example.com')
test()
我仍然收到错误消息,但这一次是无用的AssertionError,没有消息:
AssertionError:
我对应该如何执行此操作有些不确定,所以我不确定这里发生了什么。为什么此测试仍然失败,为什么我会得到一个空错误?
答案 0 :(得分:2)
删除开头的assert
,只需输入:
MockClass1.assert_called_with('https://example.com')
assert_called_with
返回错误的内容,可能是None
,而assert None
则引发了AssertionError
。