Skip to content

Commit 0ba2bb2

Browse files
committed
Add tests for merging constructor args and auto-injected dependencies.
1 parent 8daff90 commit 0ba2bb2

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

tests/unit_test/container/resolve/test_resolve_with_args.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,39 @@ def __init__(self, color: str, make):
114114

115115
# act + assert (no exception)
116116
dependency_container.resolve(dependency)
117+
118+
def test_resolve_merges_registered_constructor_args_with_auto_injected_dependencies(
119+
self,
120+
):
121+
# arrange
122+
class Engine:
123+
pass
124+
125+
class Vehicle:
126+
pass
127+
128+
class Car(Vehicle):
129+
def __init__(self, color: str, engine: Engine):
130+
self.color = color
131+
self.engine = engine
132+
133+
class CarFactory:
134+
@classmethod
135+
def create(cls, color: str, engine: Engine) -> Car:
136+
return Car(color=color, engine=engine)
137+
138+
dependency_container = DependencyContainer.get_instance()
139+
dependency_container.register_transient(Engine)
140+
dependency_container.register_transient(
141+
Vehicle,
142+
Car,
143+
constructor_args={"color": "red"},
144+
)
145+
146+
# act
147+
resolved_dependency = dependency_container.resolve(Vehicle)
148+
149+
# assert
150+
self.assertIsInstance(resolved_dependency, Car)
151+
self.assertEqual("red", resolved_dependency.color)
152+
self.assertIsInstance(resolved_dependency.engine, Engine)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from dependency_injection.container import DependencyContainer
2+
from unit_test.unit_test_case import UnitTestCase
3+
4+
5+
class TestResolveWithInjection(UnitTestCase):
6+
def test_resolve_injects_dependencies_in_constructor(
7+
self,
8+
):
9+
# arrange
10+
class Engine:
11+
pass
12+
13+
class Car:
14+
def __init__(self, engine: Engine):
15+
self.engine = engine
16+
17+
dependency_container = DependencyContainer.get_instance()
18+
dependency_container.register_transient(Engine)
19+
dependency_container.register_transient(Car)
20+
21+
# act
22+
resolved_dependency = dependency_container.resolve(Car)
23+
24+
# assert
25+
self.assertIsInstance(resolved_dependency, Car)
26+
self.assertIsNotNone(resolved_dependency.engine)
27+
self.assertIsInstance(resolved_dependency.engine, Engine)

0 commit comments

Comments
 (0)