Я изучаю питонDependency Injection в модульном тесте с Python
Я интересно, если есть механизм «впрыснуть» объект (подделка объекта в моем случае) в класс испытываемого без явного добавления его в организаторе затрат/сеттерах.
## source file
class MyBusinessClass():
def __init__(self):
self.__engine = RepperEngine()
def doSomething(self):
## bla bla ...
success
## test file
## fake I'd like to inkject
class MyBusinessClassFake():
def __init__(self):
pass
def myPrint(self) :
print ("Hello from Mock !!!!")
class Test(unittest.TestCase):
## is there an automatic mechanism to inject MyBusinessClassFake
## into MyBusinessClass without costructor/setter?
def test_XXXXX_whenYYYYYY(self):
unit = MyBusinessClass()
unit.doSomething()
self.assertTrue(.....)
В моем тесте я хотел бы «впрыснуть» объект «двигатель», не передавая его в блок-схему. Я пробовал несколько вариантов (например: @patch ...) без успеха.
+1. Просто следите за значениями false, когда делаете 'self._engine = engine или Something()', предпочитаете проверять None. Я включил такую функциональность в очень прямолинейный @ инжекторный декоратор для Python 3 ради чистого кода: https://github.com/allrod5/injectable –