Added a convenience method to the ApplicationContextInit @Rule to allow for easier spring overriding in test code.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@34805 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Neil McErlean
2012-03-27 10:10:18 +00:00
parent c2ac2cae77
commit 2fbdf1bfa7
4 changed files with 127 additions and 0 deletions

View File

@@ -19,6 +19,7 @@
*/
package org.alfresco.util.test.junitrules;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -79,6 +80,34 @@ public class ApplicationContextInit extends ExternalResource
this.configLocations = configLocations;
}
/**
* This factory method constructs a JUnit rule which will bring up an ApplicationContext consisting
* of the default Alfresco context with any additionConfigLocations appended. It is a convenient way to specify
* override contexts in test code.
*
* @param additionalConfigLocations addition config locations containing additional or overriding beans.
*/
public static ApplicationContextInit createStandardContextWithOverrides(String... additionalConfigLocations)
{
List<String> contexts = new ArrayList<String>();
// The defaults (currently only one)
for (String defaultConfigLocation: ApplicationContextHelper.CONFIG_LOCATIONS)
{
contexts.add(defaultConfigLocation);
}
// any user supplied extras
for (String additionalContext : additionalConfigLocations)
{
contexts.add(additionalContext);
}
String[] contextsAsArray = contexts.toArray(new String[0]);
return new ApplicationContextInit(contextsAsArray);
}
@Override protected void before() throws Throwable
{
// Were any context locations specified in the constructor?

View File

@@ -0,0 +1,62 @@
/*
* Copyright (C) 2005-2012 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.util.test.junitrules;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.alfresco.service.cmr.repository.ContentService;
import org.junit.ClassRule;
import org.junit.Test;
/**
* Test class for {@link ApplicationContextInit}.
*
* @author Neil Mc Erlean
* @since Odin
*/
public class ApplicationContextInitTest
{
// Some dummy contexts with test beans in them.
public static final String[] dummySpringContexts = new String[] {"classpath:org/alfresco/util/test/junitrules/dummy1-context.xml",
"classpath:org/alfresco/util/test/junitrules/dummy2-context.xml"};
// Rule to initialise the default Alfresco spring configuration
@ClassRule public static ApplicationContextInit APP_CONTEXT_INIT = ApplicationContextInit.createStandardContextWithOverrides(dummySpringContexts);
@Test public void ensureSpringContextWasInitedWithOverrides() throws Exception
{
// Bean from the standard Alfresco context
assertNotNull("Spring context did not contain expected bean.",
APP_CONTEXT_INIT.getApplicationContext().getBean("contentService", ContentService.class));
// Bean from the first override context
assertEquals("Value from dummy1-context.xml",
APP_CONTEXT_INIT.getApplicationContext().getBean("testBean1", String.class));
// Bean from the second override context
assertEquals("Value from dummy2-context.xml",
APP_CONTEXT_INIT.getApplicationContext().getBean("testBean2", String.class));
// Bean overridden in second context
assertEquals("Value from dummy2-context.xml",
APP_CONTEXT_INIT.getApplicationContext().getBean("testBean1and2", String.class));
}
}

View File

@@ -0,0 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean id="testBean1" class="java.lang.String">
<constructor-arg value="Value from dummy1-context.xml"/>
</bean>
<bean id="testBean1and2" class="java.lang.String">
<constructor-arg value="Value from dummy1-context.xml"/>
</bean>
</beans>

View File

@@ -0,0 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean id="testBean2" class="java.lang.String">
<constructor-arg value="Value from dummy2-context.xml"/>
</bean>
<bean id="testBean1and2" class="java.lang.String">
<constructor-arg value="Value from dummy2-context.xml"/>
</bean>
</beans>