Mercurial > hg > SpringPlayground
diff spring-di-playground/src/test/java/de/comline/spring/QualifierTest.java @ 0:64e2ebad3366
Import des plain Spring DI playground
author | Dirk Olmes <dirk.olmes@codedo.de> |
---|---|
date | Tue, 11 Aug 2020 16:05:44 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spring-di-playground/src/test/java/de/comline/spring/QualifierTest.java Tue Aug 11 16:05:44 2020 +0200 @@ -0,0 +1,57 @@ +package de.comline.spring; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.NoUniqueBeanDefinitionException; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import de.comline.spring.model.ActionMovieCatalog; +import de.comline.spring.model.ActionMovieLister; +import de.comline.spring.model.ComedyMovieCatalog; +import de.comline.spring.model.MovieCatalog; + +public class QualifierTest { + @Test + @DisplayName("Requesting explicit interface type") + public void explicitType() { + try (ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(ActionMovieCatalog.class, ComedyMovieCatalog.class)) { + MovieCatalog action = context.getBean(ActionMovieCatalog.class); + assertThat(action.getCategory(), is("Action")); + } + } + + @Test + @DisplayName("Qualifier can be specified at source") + public void qualifierAtSource() { + // Note how we add multiple interface implementations to the context + try (ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(ActionMovieCatalog.class, ComedyMovieCatalog.class, ActionMovieLister.class)) { + ActionMovieLister lister = context.getBean(ActionMovieLister.class); + assertThat(lister.toString(), containsString("Action")); + } + } + + @Test + @DisplayName("Binding only a single interface implementation") + public void singleImplementationOfInterface() { + try (ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(ComedyMovieCatalog.class)) { + MovieCatalog catalog = context.getBean(MovieCatalog.class); + assertThat(catalog.getCategory(), is("Comedy")); + } + } + + @Test + @DisplayName("Multiple implementations of the same interface cannot be injected") + public void multipleInterfaceImplementations() { + try (ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(ActionMovieCatalog.class, ComedyMovieCatalog.class)) { + assertThrows(NoUniqueBeanDefinitionException.class, () -> { + context.getBean(MovieCatalog.class); + }); + } + } +} \ No newline at end of file