def test_should_return_different_instances(self): pinsor = PinsorContainer() pinsor.addcomponent(FakeObj, key="comp.fake1") pinsor.addcomponent(FakeObj, key="comp.fake2") fake1 = pinsor.resolve(key="comp.fake1") fake2 = pinsor.resolve(key="comp.fake2") self.assertNotEqual(id(fake1), id(fake2))
def test_should_return_new_instance_each_time_resolve_is_called_when_lifestyle_of_that_component_is_set_to_transient(self): pinsor = PinsorContainer() pinsor.addcomponent(FakeObj, depends=[], lifestyle = LifeStyle.transient) fakeobj1 = pinsor.resolve(FakeObj) fakeobj2 = pinsor.resolve(FakeObj) assert isinstance(fakeobj1, FakeObj) assert isinstance(fakeobj2, FakeObj) self.assertNotEqual(id(fakeobj1), id(fakeobj2))
def test_should_throw_an_exception_when_circular_dependency_is_found(self): pinsor = PinsorContainer() pinsor.addcomponent(CircularDependencyA, depends=[CircularDependencyB]) pinsor.addcomponent(CircularDependencyB, depends=[CircularDependencyA]) try: depA = pinsor.resolve(CircularDependencyA) except CircularDependencyException: pass else: self.fail("This should raise an exception")
class working_with_explicit_interceptor_tests(unittest.TestCase): def setUp(self): self.commands = [] self._container = PinsorContainer() self._container.register(Component.oftype(InterceptMe).depends([Instance(self.commands)]).interceptors([BeforeAfterCeptor(self.commands)])) self._comp = self._container.resolve(InterceptMe) def test_should_apply_behavior_before_method_call(self): self._comp.run("call me") self.assertNotEqual(len(self.commands), 1) self.assertEqual( self.commands[0] , "intercepted")
def setUp(self): self.commands = [] self._container = PinsorContainer() self._container.register(Component.oftype(InterceptMe).depends([Instance(self.commands)]).interceptors([BeforeAfterCeptor(self.commands)])) self._comp = self._container.resolve(InterceptMe)
class container_tests(unittest.TestCase): def setUp(self): self.pinsor = PinsorContainer() self.pinsor.addcomponent(FakeObj) def test_should_retrieve_class_instantiated(self): fakeinstance = self.pinsor.resolve(FakeObj) assert isinstance(fakeinstance, FakeObj) def test_should_build_class_with_one_dependency(self): self.pinsor.addcomponent(NeedsFakeObj, depends=[FakeObj]) needsfake = self.pinsor.resolve(NeedsFakeObj) assert isinstance(needsfake, NeedsFakeObj) assert needsfake.HasFakeObj() def test_should_instantiate_all_objects_in_dependency_tree(self): self.pinsor.addcomponent(NeedsFakeObj, depends=[FakeObj]) self.pinsor.addcomponent(FakeObjWithArgs, depends=[FakeObj, NeedsFakeObj]) fakeobj = self.pinsor.resolve(FakeObjWithArgs) assert isinstance(fakeobj, FakeObjWithArgs) assert fakeobj.DoesStuff() def test_should_return_same_instance_each_time_resolve_is_called_by_default(self): fakeobj1 = self.pinsor.resolve(FakeObj) fakeobj2 = self.pinsor.resolve(FakeObj) self.assertEqual(id(fakeobj1), id(fakeobj2)) def test_should_return_new_instance_each_time_resolve_is_called_when_lifestyle_of_that_component_is_set_to_transient(self): pinsor = PinsorContainer() pinsor.addcomponent(FakeObj, depends=[], lifestyle = LifeStyle.transient) fakeobj1 = pinsor.resolve(FakeObj) fakeobj2 = pinsor.resolve(FakeObj) assert isinstance(fakeobj1, FakeObj) assert isinstance(fakeobj2, FakeObj) self.assertNotEqual(id(fakeobj1), id(fakeobj2)) def test_should_be_able_to_resolve_by_component_key(self): pinsor = PinsorContainer() pinsor.addcomponent(FakeObj, key="comp.fakeobj") fakeobj = pinsor.resolve(key="comp.fakeobj") assert isinstance(fakeobj, FakeObj) def test_should_retrieve_dependencies_dependencies_by_key(self): pinsor = PinsorContainer() pinsor.addcomponent(FakeObj, key="comp.fakeobj") pinsor.addcomponent(NeedsFakeObj, depends = [Config("comp.fakeobj")]) needsfake = pinsor.resolve(NeedsFakeObj) assert needsfake.HasFakeObj def test_should_throw_an_exception_when_circular_dependency_is_found(self): pinsor = PinsorContainer() pinsor.addcomponent(CircularDependencyA, depends=[CircularDependencyB]) pinsor.addcomponent(CircularDependencyB, depends=[CircularDependencyA]) try: depA = pinsor.resolve(CircularDependencyA) except CircularDependencyException: pass else: self.fail("This should raise an exception")
def test_should_retrieve_dependencies_dependencies_by_key(self): pinsor = PinsorContainer() pinsor.addcomponent(FakeObj, key="comp.fakeobj") pinsor.addcomponent(NeedsFakeObj, depends = [Config("comp.fakeobj")]) needsfake = pinsor.resolve(NeedsFakeObj) assert needsfake.HasFakeObj
def test_should_be_able_to_resolve_by_component_key(self): pinsor = PinsorContainer() pinsor.addcomponent(FakeObj, key="comp.fakeobj") fakeobj = pinsor.resolve(key="comp.fakeobj") assert isinstance(fakeobj, FakeObj)
def setUp(self): self.pinsor = PinsorContainer() self.pinsor.addcomponent(FakeObj)
class fluent_registration_of_objects_tests(unittest.TestCase): def setUp(self): self.pinsor = PinsorContainer() def test_should_pass_component_into_containter_by_class_name(self): self.pinsor.register(Component.oftype(FakeObj)) fake = self.pinsor.resolve(FakeObj) assert isinstance(fake,FakeObj) def test_should_pass_component_into_container_and_set_key(self): self.pinsor.register(Component.oftype(FakeObj).named("comp.key")) assert self.pinsor.objectgraph["comp.key"].classtype == FakeObj fake = self.pinsor.resolve(key='comp.key'); assert isinstance(fake, FakeObj) def test_should_pass_more_than_one_component_into_container(self): self.pinsor.register( Component.oftype(FakeObj).named("fake1"), Component.oftype(FakeObj).named("fake2") ) fake1 = self.pinsor.resolve(key="fake1") fake2 = self.pinsor.resolve(key="fake2") assert isinstance(fake1, FakeObj) assert isinstance(fake2, FakeObj) def test_should_set_dependencies(self): self.pinsor.register( Component.oftype(FakeObj), Component.oftype(NeedsFakeObj).depends([FakeObj]) ) needsfake = self.pinsor.resolve(NeedsFakeObj) assert needsfake.HasFakeObj() def test_should_set_lifestyle(self): self.pinsor.register( Component.oftype(FakeObj).lifestyle(LifeStyle.transient()) ) fake1 = self.pinsor.resolve(FakeObj) fake2 = self.pinsor.resolve(FakeObj) self.assertNotEqual(id(fake1), id(fake2)) def test_should_set_multiple_options_at_once(self): self.pinsor.register( Component.oftype(FakeObj), Component.oftype(NeedsFakeObj).depends([FakeObj]).named("needs").lifestyle(LifeStyle.transient()) ) com = self.pinsor.objectgraph["needs"] self.assertEqual(NeedsFakeObj, com.classtype) self.assertEqual("transient", com.lifestyle) self.assertEqual(FakeObj, com.depends[0]) def test_should_be_able_to_register_by_key(self): self.pinsor.register( Component.oftype(FakeObj).named("fake1"), Component.oftype(FakeObj).named("fake2"), Component.oftype(NeedsFakeObj).depends([Config("fake1")]).named("needs1"), Component.oftype(NeedsFakeObj).depends([Config("fake2")]).named("needs2") ) fake2_id = id(self.pinsor.resolve(key="fake2")) needsfake = self.pinsor.resolve(key="needs2") fakefromneeds1_id = id(needsfake.FakeInstance()) def test_should_be_able_register_a_param(self): fakeobj = FakeObj() self.pinsor.register( Component.oftype(NeedsFakeObj).depends([Instance(fakeobj)]) ) fakefromneeds = self.pinsor.resolve(NeedsFakeObj) self.assertEqual(id(fakeobj), id(fakefromneeds.FakeInstance()))
def setUp(self): self.pinsor = PinsorContainer()