/* * Copyright 2008, Unitils.org * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.unitils.spring; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.unitils.core.ConfigurationLoader; import org.unitils.core.UnitilsException; import org.unitils.spring.annotation.SpringApplicationContext; import org.unitils.spring.annotation.SpringBean; import org.unitils.spring.annotation.SpringBeanByName; import org.unitils.spring.annotation.SpringBeanByType; /** * Test for the {@link SpringModule}. * * @author Tim Ducheyne * @author Filip Neven */ public class SpringModuleSpringBeansTest { /* Tested object */ private SpringModule springModule; /** * Initializes the test and test fixture. */ @Before public void setUp() throws Exception { Properties configuration = new ConfigurationLoader().loadConfiguration(); springModule = new SpringModule(); springModule.init(configuration); } /** * Tests assigning a spring bean using its name. */ @Test public void testAssignSpringBeans() { SpringTest springTest = new SpringTest(); springModule.injectSpringBeans(springTest); assertNotNull(springTest.testBean); assertNotNull(springTest.testBeanSetter); } /** * Tests assigning a spring bean by declared type of field and setter. */ @Test public void testAssignSpringBeansByType() { SpringTestByType springTestByType = new SpringTestByType(); springModule.injectSpringBeansByType(springTestByType); assertNotNull(springTestByType.testBean); assertNotNull(springTestByType.testBeanSetter); } /** * Tests assigning a spring bean by name of field. */ @Test public void testAssignSpringBeansByName() { SpringTestByName springTestByName = new SpringTestByName(); springModule.injectSpringBeansByName(springTestByName); assertNotNull(springTestByName.testBeanByName); } /** * Tests assigning a spring bean by name of setter. */ @Test public void testAssignSpringBeansByName_setter() { SpringTestByNameSetter springTestByNameSetter = new SpringTestByNameSetter(); springModule.injectSpringBeansByName(springTestByNameSetter); assertNotNull(springTestByNameSetter.testBeanByName); } /** * Tests assigning a spring bean using an unexisting name. */ @Test public void testAssignSpringBeans_notFound() { SpringTestNotFound springTestNotFound = new SpringTestNotFound(); try { springModule.injectSpringBeans(springTestNotFound); fail("Expected UnitilsException"); } catch (UnitilsException e) { // expected } assertNull(springTestNotFound.testBean); } /** * Tests assigning a spring bean using an unexisting type. */ @Test public void testAssignSpringBeansByType_notFound() { SpringTestByTypeNotFound springTestByTypeNotFound = new SpringTestByTypeNotFound(); try { springModule.injectSpringBeansByType(springTestByTypeNotFound); fail("Expected UnitilsException"); } catch (UnitilsException e) { // expected } assertNull(springTestByTypeNotFound.testBean); } /** * Tests assigning a spring bean using an ambiguous type (TreeSet, HashSet). */ @Test public void testAssignSpringBeansByType_ambiguous() { SpringTestByTypeAmbiguous springTestByTypeAmbiguous = new SpringTestByTypeAmbiguous(); try { springModule.injectSpringBeansByType(springTestByTypeAmbiguous); fail("Expected UnitilsException"); } catch (UnitilsException e) { // expected } assertNull(springTestByTypeAmbiguous.testBean); } /** * Tests assigning a spring bean using an unexisting field name. */ @Test public void testAssignSpringBeansByName_notFound() { SpringTestByNameNotFound springTestByNameNotFound = new SpringTestByNameNotFound(); try { springModule.injectSpringBeansByName(springTestByNameNotFound); fail("Expected UnitilsException"); } catch (UnitilsException e) { // expected } assertNull(springTestByNameNotFound.xxxx); } /** * Test SpringTest class. */ @SpringApplicationContext({"classpath:org/unitils/spring/services-config.xml"}) private class SpringTest { @SpringBean("aBeanName") private String testBean = null; private String testBeanSetter = null; @SpringBean("aBeanName") public void setTestBeanSetter(String testBeanSetter) { this.testBeanSetter = testBeanSetter; } } /** * Test SpringTest class by type. */ @SpringApplicationContext({"classpath:org/unitils/spring/services-config.xml"}) private class SpringTestByType { @SpringBeanByType private List<?> testBean = null; private List<?> testBeanSetter = null; @SpringBeanByType public void setTestBeanSetter(List<?> testBeanSetter) { this.testBeanSetter = testBeanSetter; } } /** * Test SpringTest class by type but type is ambiguous (TreeSet and HashSet). */ @SpringApplicationContext({"classpath:org/unitils/spring/services-config.xml"}) private class SpringTestByTypeAmbiguous { @SpringBeanByType private Set<?> testBean = null; } /** * Test SpringTest class by name. */ @SpringApplicationContext({"classpath:org/unitils/spring/services-config.xml"}) private class SpringTestByName { @SpringBeanByName private String testBeanByName = null; } /** * Test SpringTest class by name. */ @SpringApplicationContext({"classpath:org/unitils/spring/services-config.xml"}) private class SpringTestByNameSetter { private String testBeanByName = null; @SpringBeanByName public void setTestBeanByName(String testBeanByName) { this.testBeanByName = testBeanByName; } } /** * Test SpringTest class with unexisting bean. */ @SpringApplicationContext({"classpath:org/unitils/spring/services-config.xml"}) private class SpringTestNotFound { @SpringBean("xxxxx") private String testBean = null; } /** * Test SpringTest class by type (Map) that is not in context. */ @SpringApplicationContext({"classpath:org/unitils/spring/services-config.xml"}) private class SpringTestByTypeNotFound { @SpringBeanByType private Map<?,?> testBean = null; } /** * Test SpringTest class by name that is not in context. */ @SpringApplicationContext({"classpath:org/unitils/spring/services-config.xml"}) private class SpringTestByNameNotFound { @SpringBeanByName private String xxxx = null; } }