Diğer cevaplar bakılırsa, dışında hiç kimse soymak-Kennedy @ bahsettik call_args_list.
Tam tersini uygulayabileceğiniz güçlü bir araçtır. MagicMock.assert_called_with()
call_args_listcallnesnelerin bir listesidir . Her callnesne, sahte bir çağrılabilir üzerinde yapılan bir çağrıyı temsil eder.
>>> from unittest.mock import MagicMock
>>> m = MagicMock()
>>> m.call_args_list
[]
>>> m(42)
<MagicMock name='mock()' id='139675158423872'>
>>> m.call_args_list
[call(42)]
>>> m(42, 30)
<MagicMock name='mock()' id='139675158423872'>
>>> m.call_args_list
[call(42), call(42, 30)]
Bir callnesneyi tüketmek kolaydır, çünkü onu birinci bileşenin ilgili çağrının tüm konumsal argümanlarını içeren bir demet olduğu, ikinci bileşenin ise anahtar kelime argümanlarının bir sözlüğü olduğu 2 uzunluğundaki bir demet ile karşılaştırabilirsiniz.
>>> ((42,),) in m.call_args_list
True
>>> m(42, foo='bar')
<MagicMock name='mock()' id='139675158423872'>
>>> ((42,), {'foo': 'bar'}) in m.call_args_list
True
>>> m(foo='bar')
<MagicMock name='mock()' id='139675158423872'>
>>> ((), {'foo': 'bar'}) in m.call_args_list
True
Öyleyse, OP'nin özel sorununu ele almanın bir yolu,
def test_something():
with patch('something') as my_var:
assert ((some, args),) not in my_var.call_args_list
Bu şekilde, sadece sahte bir çağrılabilirin çağrılıp çağrılmadığını kontrol etmek yerine MagicMock.called, şimdi belirli bir argüman kümesiyle çağrılıp çağrılmadığını kontrol edebilirsiniz.
Bu yararlıdır. Listenin compute()her bir değeri için, yalnızca belirli bir koşulu karşıladıklarında , bir listeyi alan ve başka bir işlevi çağıran bir işlevi test etmek istediğinizi varsayalım.
Şimdi alay edebilir computeve bir değer için çağrılıp diğerlerinde çağrılmadığını test edebilirsiniz.