我正在爲一個函數編寫一個單元測試,該函數將確認使用正確的參數調用其中調用的函數。問題是其中一個參數是一個生成器。比較mock.assert_has_calls中的生成器對象
有沒有辦法比較使用assert_has_calls
調用fn
的生成器的內容? 「AssertSequenceEqual」中展示了我正在尋找的行爲示例。實際上,test_use_fn
因爲它正在比較的生成器對象不同而失敗。
import mock
def fn(entries):
pass
def use_fn(entries, convert=lambda x: x):
entries = (convert(entry) for entry in entries)
entries = fn(entries)
entries = fn(entries)
@mock.patch('fn')
def test_use_fn(self, mock_fn):
mock_fn.return_value = 'baz'
entries = ['foo', 'bar']
use_fn(entries)
call_1 = mock.call((entry for entry in entries))
call_2 = mock.call('baz')
mock_fn.assert_has_calls([call_1, call_2])
沒有兩個生成器對象是相同的,所以它們總是會失敗一個相等或「is」測試。嵌套的內部函數也是如此。 – aruisdante 2014-10-17 18:35:48
這看起來像是http://XYproblem.info的例子。你能否進一步解釋爲什麼你想驗證這樣的電話? – 2014-10-17 19:12:54
@aruisdante,我知道;這是問題的核心。我正在尋找的行爲示例展示在'assertSequenceEqual'中。 – nodocitna 2014-10-17 20:13:20