Chcę potwierdzić, że jeden classmethod w klasie Python wywołuje inną metodę klasy z pewnym zbiorem argumentów. Chciałbym, aby wyszydzony sposób klasy był "spec-ed", więc wykrywa, czy jest wywoływany z niewłaściwą liczbą argumentów.Jak naprawić metodę class z autospec w niezmkniętej klasie?
Po przyklejeniu metody class za pomocą patch.object(.., autospec=True, ..)
, metoda class zostaje zastąpiona przez NonCallableMagicMock
i powoduje zgłoszenie błędu podczas próby wywołania.
from mock import patch
class A(object):
@classmethod
def api_meth(cls):
return cls._internal_classmethod(1, 2, 3)
@classmethod
def _internal_classmethod(cls, n, m, o):
return sum(n, m, o)
with patch.object(A, '_internal_classmethod') as p:
print(type(p).__name__)
with patch.object(A, '_internal_classmethod', autospec=True) as p:
print(type(p).__name__)
produkuje wyjście:
MagicMock
NonCallableMagicMock
Jak mogę uzyskać makiety Spec-ED _internal_classmethod
gdy klasa należy do nie jest wyśmiewany?
Rozwiązuje to problem z odzyskiwaniem NonCallableMagicMock, ale niestety nie zapewnia zachowywania się niezgodności sygnatury wywołania w wyśmiewanej metodzie klasy. To zachowanie jest ważne, ponieważ chroni przed wyśmiewanymi testami, które mijają, mimo że sam kod jest uszkodzony, być może zmieniając sygnaturę wywołania metody. Podejrzewam, że zachowanie, którego szukam, jest "częściowym autospeciem" i że być może udawanie jeszcze nie obsługuje tego typu rzeczy. – scanny