Birim testleri, işlevselliği sınamalı ve uygulama ayrıntılarını algılamaya çalışmalıdır. Mock.assert_called_with()
uygun bir işlevdir, ancak AFAIK, *args
'u *args
ve ile **kwargs
arasında karşılaştırır. Bu nedenle:Mock.assert_called_with() args vs kwargs için agnostic
# class to be mocked during test
class SomeClass():
def func(self,a,b,c=5):
# ...
# code under test
somaclass_instance.func(1,b=2,c=3)
# test code that works
someclass_mock.func.assert_called_with(1,b=2,c=3)
# test code that won't work
someclass_mock.func.assert_called_with(1,2,c=3)
someclass_mock.func.assert_called_with(a=1,b=2,c=3)
gerçekten bir uygulama ayrıntıdır func
çağrısına, içinde **kwargs
olarak kullanılan hangi *args
özelliklerini, göz ardı edilecektir ki bu genelleme bir yolu var mı?
Sorunu anladığımdan% 100 emin değilim, ama aynı işlev çağrısında * args ve ** kwargs'I KİLİTLEDİĞİNİZ ya da args tip tuple olduğundan ve kwargs dicts olduğundan girişi, normalde çalıştığınız şekilde normalize eden bir sarmalayıcı işlevi yazabilir. –
Şimdiye kadar böyle bir sahte çerçeve var mı? Testlerim başarısız olmamalı çünkü birisi bir pozisyon argümanını bir noktada bir anahtar kelime argümanında değiştirmeye karar verdi. Ancak, bu soru, bahsettiğim bu sorunu gördüğüm tek zamandır. Mock zaten spec-nesneleri destekler, bu mümkün olmalı? – jan