Мы делаем это.
class FakeSomethingOrOther( object ):
def __init__( self ):
self._count_me= 0
def method_required_by_test( self ):
return self.special_answer_required_by_test
def count_this_method( self, *args, *kw ):
self._count_me += 1
Их не нужно много настраивать
class TestSomething( unittest.TestCase ):
def setUp( self ):
self.requiredSomething = FakeSomethingOrOther()
self.requiredSomething.attribute_required_by_test= 12
self.requiredSomething.special_answer_required_by_test = 32
self.to_be_tested = ActualThing( self.requiredSomething )
Поскольку вам не требуются сложные статически проверенные объявления типов, все, что вам нужно, это класс с правильными методами. Вы можете принудительно установить значения атрибутов теста в тривиальном порядке.
Эти вещи действительно очень легко написать. Вам не нужно много поддержки или библиотек.
В других языках (например, Java) очень сложно написать что-то, что пройдет проверку статической проверкой во время компиляции. Поскольку в Python такой проблемы нет, писать тесты или фальшивые реализации тривиально для целей тестирования.