Définir la propriété système pour JUnit Runner (Eclipse) pour tester une application Web Spring

Notre web app utilise SystemPropertyPlaceholder pour charger les fichiers de propriétés en fonction de la valeur d'un système de propriété (voir ci-dessous)

La configuration par défaut pour exécuter localement est stocké dans application.properties. Sur le serveur de production, nous avons simplement mis "env" à la "production" avant le déploiement de l'application et il va charger production.properties.

Maintenant pour le test de l'application d'un test.properties fichier doit être utilisé.

Si j'exécute tous les tests disent que dans notre jenkins construire, en ajoutant -Denv=test fonctionnera comme prévu. Mais si je veux juste faire un seul test dans Eclipse avec le système intégré de JUnit coureur?

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

Est-il possible de dire à mon test, il doit définir la propriété système "env" afin de "tester" AVANT que le Printemps est chargé? Parce que l'utilisation de MethodInvokingFactoryBean est définie uniquement par la suite pour une raison quelconque, même si je l'ai mis avant de charger mes fichiers de propriété:

<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>

Avec les propriétés de la base définie à l'intérieur de l'application.propriétés, de la production.propriétés et de test.les propriétés.

Le point est, bien sûr, que je veux utiliser le même fichier de contexte pour tous les environnements, sinon je pourrais juste dire mon test à utiliser un contexte différent où j'ai mis Le PropertyPlaceholder propriété "emplacement" pour tester.propriétés... Mais je veux que mes tests pour couvrir également mon contexte, de sorte que les erreurs y sont pris dès que possible (je suis en train de faire à la fin des tests sur notre application web avec spring-web mvc qui charge l'intégralité de l'application web offrant quelques gentils commentaires, et je ne veux pas perdre).

Jusqu'à présent, la seule façon que je peux voir, vous pouvez configurer le runner JUnit pour inclure un système de définition de propriété de l'argument, mais je ne sais pas comment faire..

source d'informationauteur Pete | 2012-06-12