Python 3.x 当我';m断言一个方法被调用了吗?蟒蛇3

Python 3.x 当我';m断言一个方法被调用了吗?蟒蛇3,python-3.x,unit-testing,mocking,wildcard,assert,Python 3.x,Unit Testing,Mocking,Wildcard,Assert,当将mock的call()对象与assert\u has\u calls一起使用时,我很难断言一个给定的字符串已被使用,并在末尾附加了一个未知值 例如: 测试中的代码: mystring = 'a known string with an unknown value: {0}'.format(unknown_value) method_to_call(mystring) with mock.patch('method_to_call') as mocked_method: calls =

当将
mock
call()
对象与
assert\u has\u calls
一起使用时,我很难断言一个给定的字符串已被使用,并在末尾附加了一个未知值

例如:

测试中的代码:

mystring = 'a known string with an unknown value: {0}'.format(unknown_value)
method_to_call(mystring)
with mock.patch('method_to_call') as mocked_method:
  calls = [call('a known string with and unknown value: {0}'.format(mock.ANY)]
  call_method()
  mocked_method.assert_has_calls(calls)
当前测试代码:

mystring = 'a known string with an unknown value: {0}'.format(unknown_value)
method_to_call(mystring)
with mock.patch('method_to_call') as mocked_method:
  calls = [call('a known string with and unknown value: {0}'.format(mock.ANY)]
  call_method()
  mocked_method.assert_has_calls(calls)
这给了我以下几点启示:

AssertionError: Calls not found.
Expected: [call('a known string with and unknown value: <ANY>')]
AssertionError:找不到调用。
应为:[调用('具有未知值的已知字符串:')]
如何断言给定字符串已传递给方法,但允许未知值?

可以使用lib对方法调用中使用的字符串进行部分匹配:

从被调用方导入字符串,正则表达式
使用mock.patch('method\u to\u call')作为mock\u方法:
调用方法()
mock_方法。assert_调用_时使用(String()&Regex('具有未知值的已知字符串:.*))
或者,如果您不想添加另一个库,并且您确定知道调用的顺序,那么可以从调用参数中提取字符串,然后使用正则表达式进行匹配

重新导入
使用mock.patch('method\u to\u call')作为mock\u方法:
调用方法()
参数\字符串=模拟\方法。调用\参数[0][0]
pattern=re.compile(“具有未知值的已知字符串:.*))
assert pattern.match(参数\字符串)
您可以使用lib对方法调用中使用的字符串进行部分匹配:

从被调用方导入字符串,正则表达式
使用mock.patch('method\u to\u call')作为mock\u方法:
调用方法()
mock_方法。assert_调用_时使用(String()&Regex('具有未知值的已知字符串:.*))
或者,如果您不想添加另一个库,并且您确定知道调用的顺序,那么可以从调用参数中提取字符串,然后使用正则表达式进行匹配

重新导入
使用mock.patch('method\u to\u call')作为mock\u方法:
调用方法()
参数\字符串=模拟\方法。调用\参数[0][0]
pattern=re.compile(“具有未知值的已知字符串:.*))
assert pattern.match(参数\字符串)

非常棒的使用
被调用方的呐喊
这是一个非常好的库!最后我用了正则表达式。啊!如果这更符合您的用例,这是一个很好的观点-我将编辑答案,以便使用
callee
这是一个非常好的库!最后我用了正则表达式。啊!如果这更符合您的用例,这是一个很好的观点-我将编辑答案