@Test public void testGettingComponentWithMissingDependencyFails() throws PicoException { MutablePicoContainer picoContainer = createPicoContainerWithDependsOnTouchableOnly(); picoContainer.setName("parent"); try { picoContainer.getComponent(DependsOnTouchable.class); fail("should need a Touchable"); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { String message = e.getMessage().replace("com.picocontainer.testmodel.", ""); assertEquals("DependsOnTouchable has unsatisfied dependency 'interface Touchable' for constructor 'public DependsOnTouchable(Touchable)' from parent:1<|", message); } }
@Test public void testUnsatisfiableDependenciesExceptionGivesVerboseEnoughErrorMessage() { MutablePicoContainer pico = createPicoContainer(null); pico.setName("parent"); pico.addComponent(ComponentD.class); try { pico.getComponent(ComponentD.class); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { String msg = e.getMessage().replace("com.picocontainer.tck.AbstractPicoContainerTest$Component", ""); assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:1<|", msg); } }
@Test public void testUnsatisfiableDependenciesExceptionGivesUnsatisfiedDependencyTypes() { MutablePicoContainer pico = createPicoContainer(null); pico.setName("parent"); // D depends on E and B pico.addComponent(ComponentD.class); // first - do not register any dependency // should yield first unsatisfied dependency try { pico.getComponent(ComponentD.class); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { String message = e.getMessage().replace("com.picocontainer.tck.AbstractPicoContainerTest$Component", ""); assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:1<|", message); } // now register only first dependency // should yield second unsatisfied dependency pico.addComponent(ComponentE.class); try { pico.getComponent(ComponentD.class); } catch (AbstractInjector.UnsatisfiableDependenciesException e) { String message = e.getMessage().replace("com.picocontainer.tck.AbstractPicoContainerTest$Component", ""); assertEquals("D has unsatisfied dependency 'class B' for constructor 'public D(E,B)' from parent:2<|", message); } }
@Test public void testNullValuesDoNotInject() { MutablePicoContainer pico = createPicoContainer(null); pico.addComponent(ConstantParameterTestService.class, ConstantParameterTestService.class, new ConstantParameter(null)); try { ConstantParameterTestService service = pico.getComponent(ConstantParameterTestService.class); fail("Should have thrown unsatisfiable dependencies exception. Instead got " + service + " as a return value"); } catch (UnsatisfiableDependenciesException e) { assertNotNull(e.getMessage()); } }