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
Vous devez vous connecter pour publier un commentaire.
Je suis en train de travailler sur exactement le même problème aujourd'hui et j'espère trouvé le chemin. Vous pouvez appeler
System.setProperty()
dans l'initialiseur statique de votre cas de test.Dans Eclipse, cliquez-droit sur la classe de test JUnit, sélectionnez Exécuter en tant Qu' > Run Configurations..., puis passez à l'onglet Arguments, et sous VM Arguments, ajouter dans le système de la propriété d'entrée, par exemple -Dcatalina.base=C:\programmes\apache-tomcat-7.0.32
Vous pouvez essayer d'utiliser
dépend-on
attribut des méthodes invoquant bean course avant les autres