7
votes

Propriétés junit / Spring ne se charge pas avec le contexte de l'application

Lors de l'exécution d'un test JUnit, je ne peux pas obtenir le contexte de l'application pour charger les propriétés des fichiers de propriétés externes.

Compte tenu des éléments suivants: p>

testclass p> xxx pré>

APP-CONFIG.XML P>

<util:properties id="aProperties" location="classpath:spring/a.properties" />
<util:properties id="bProperties" location="classpath:spring/b.properties" />

<bean id="oracleDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="${oracle.url}"/>
    <property name="username" value="${oracle.username}"/>
    <property name="password" value="${oracle.password}"/>
</bean>


2 commentaires

Exécutez-vous les tests via une construction Maven ou via Eclipse> Exécuter comme> Junit Test?


Eclipse> Exécuter comme> Junit Test Maven à ce stade ne gère que des dépendances. Je l'ai seulement amené parce que j'ai rencontré un autre insecte avec celui-ci qui a dû faire avec l'ordre du chemin de construction.


4 Réponses :


0
votes

Il apparaît que vous utilisez Maven. Cela aiderait à savoir où vous mettez les fichiers. Par convention, la version de test des fichiers de propriétés devrait aller dans la version SRC / Test / Resources / et la version de production dans SRC / Main / Ressources. Ils devraient résoudre automatiquement.


1 commentaires

SRC / Main / Ressources / Spring / App-Config.xml A.Properties B.properties Je ne les ai pas eues copiées à SRC / Test / Ressources. Je viens de les copier, nettoyé et re-ran le test et cela ne fonctionne toujours pas. L'exception réelle a été levée est la suivante: org.springframework.jdbc.CANNOTGETJDBCConnectionException: Impossible d'obtenir une connexion JDBC; exception imbriquée est org.apache.commons.dbcp.sqlnestetion exception: impossible de créer PoolaBacConnectionfactory (ORA-01017: nom d'utilisateur / mot de passe non valide; connecté refusé si j'endique du disque dur des valeurs dans le fichier XML, cela fonctionne, mais ne lira toujours pas le des dossiers.



6
votes

Selon votre exception:

org.springframework.jdbc.cannotgetjdbcconnectionException: Impossible d'obtenir une connexion JDBC; imbriqué Exception est org.apache.commons.dbcp.sqlnesteceptionException: Ne peut pas créer PoolaBlaConnectionFactory (ORA-01017: nom d'utilisateur / mot de passe invalide; se connecter refusé

Votre probelm n'est pas que les propriétés ne sont pas trouvées, si les propriétés ne sont pas trouvées, si les propriétés ne sont pas trouvées, l'exception serait quelque chose comme org.springframework.beans.Factory.beandefinitionSoreException: ... impossible de résoudre le lieu d'accueil 'oracle.username'

Et ceci est parce que Vous devez configurer un caractère de propriétéLetholderConfigureur au lieu d'un PropriétésFactoryBean (c'est ce que UTIL: les propriétés sont http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework- référence.html # xsd-config-body-schemas-util-propriétés ) xxx


3 commentaires

Mais lorsque je remplace le texte de l'espace réservé dans le contexte de l'application avec les valeurs d'URL / nom d'utilisateur / mot de passe réelles, le test fonctionne. La seule chose à laquelle je puisse penser, c'est que les propriétés ne sont pas correctement lues ni trouvées. Les journaux [Info] indiquent même que les propriétés sont chargées. Lorsque cela est publié dans un conteneur Web, tout fonctionne bien. I.E. Les propriétés sont trouvées, lues et insérées correctement. :(


Les tests fonctionnent avec des valeurs réelles car ils sont lus et attribués sous forme de chaîne. Les propriétés sont trouvées mais elles ne sont pas traduites, c'est-à-dire "" $ {foo.bar} "sera considéré comme une chaîne non comme une clé pour une certaine valeur. Peut-être que le déploiement du conteneur Web implique un espace de placement dans le contexte complet. Dans votre test, vous n'avez qu'un contexte minimal.


@ Aralph J'essayais de répondre à la question de Camada (au moins me semble une question) du premier commentaire. Mais j'ai oublié de le taguer



-1
votes

J'ai abandonné. J'ai téléchargé une nouvelle copie d'Eclipse 3.6 pour Java EE et j'ai suivi les instructions d'installation SpringSource Tool Suite via la méthode Site de mise à jour.

J'ai importé mon projet dans le nouvel environnement avec un nouvel espace de travail et tout ce qui fonctionne parfaitement.

Je vais le craquer aux gnomes Eclipse.


1 commentaires

abandonner et refaire la chose est la dernière chose à faire. Ce n'est pas une solution à une question.



1
votes

Vous pouvez séparer vos fichiers de configuration de test, contexte de ressort, jbdc.properties, dans src / test / ressources dirvoir pour respecter les fichiers de structure maven. Pour configurer des fichiers spéciaux pour le test, vous devez les définir dans le contexte de l'application Spring Test à l'aide de PropertyProitPlaceLerfigurier comme Ralph Dites.

Les fichiers de propriété doivent Soyez dans src / tests / ressources et chargez-les avec le nom de la barre oblique et du fichier /a.properties . Placez le fichier dans le même répertoire que le fichier de configuration du ressort pour le charger. xxx


0 commentaires