Establecer propiedades del sistema para JUnit Runner (Eclipse) para probar una aplicación web de Spring

Nuestra aplicación web utiliza SystemPropertyPlaceholder para cargar archivos de propiedades en función del valor de una propiedad del sistema (ver más abajo)

La configuración predeterminada para ejecutarlo localmente se almacena enapplication.properties. En el servidor de producción, actualmente solo configuramos "env" en "producción" antes de implementar la aplicación y se cargaráproduction.properties.

Ahora para probar la aplicación untest.properties archivo debe ser utilizado.

Si ejecuto todas las pruebas, digamos en nuestra compilación de Jenkins, agregando-Denv=test funcionará como se espera. ¿Pero qué sucede si solo quiero ejecutar una prueba en Eclipse con el corredor JUnit integrado?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = WebContextLoader.class, locations = {"classpath:application-context.xml" })
public class SomeTest {

¿Hay alguna manera de decirle a mi prueba que debe establecer la propiedad del sistema "env" en "prueba" ANTES de que Spring esté cargada? Porque usandoMethodInvokingFactoryBean solo lo estableceré después por algún motivo, incluso si lo configuro antes de cargar mis archivos de propiedades:

<bean id="systemPrereqs"
    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" value="#{@systemProperties}" />
    <property name="targetMethod" value="putAll" />
    <property name="arguments">
        <!-- The new Properties -->
        <util:properties>
            <prop key="env">test</prop>
        </util:properties>
    </property>
</bean>

<bean
    class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="searchContextAttributes" value="true" />
    <property name="contextOverride" value="true" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>classpath:application.properties</value>
            <value>classpath:${env}.properties</value>
            <value>${config}</value>
        </list>
    </property>
</bean>

<bean id="managerDataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="username">
        <value>${database.username}</value>
    </property>
    <property name="password">
        <value>${database.password}</value>
    </property>
    <property name="url">
        <value>${database.url}</value>
    </property>

</bean>

Con las propiedades de la base de datos definidas dentro de application.properties, production.properties y test.properties.

El punto es, por supuesto, que quiero usar el mismo archivo de contexto para todos los entornos, de lo contrario, podría decirle a mi prueba que use un contexto diferente donde establezco la "ubicación" de la propiedad PropertyPlaceholder en test.properties ... Pero quiero mis pruebas también cubren mi contexto para que cualquier error se detecte lo antes posible (estoy haciendo pruebas de extremo a extremo en nuestra aplicación web con spring-web-mvc, que carga toda la aplicación web proporcionando algunos comentarios agradables allí y No quiero perder eso.

Hasta ahora, la única forma que puedo ver es configurar el corredor JUnit para incluir algún argumento de configuración de propiedades del sistema, aunque no sé cómo hacerlo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta