Printemps jUnit Test - soit ne peut pas autowire ou ne peut pas trouver appContext.xml
Je suis unittesting un ressort en fonction de l'application de l'atm.
D'abord le problème, c'est que si je n'ai pas commencé une fois que l'application sur un serveur de la unittests d'échec.
Si je fais démarrer l'application sur le serveur (et de l'arrêt), mes tests d'unité de travail.
Sans démarrer le serveur j'obtiens l'erreur suivante:
... java.io.FileNotFoundException: class path resource [META-INF/spring/applicationContext-test.xml] cannot be opened because it does not exist
Mon test Unitaire est défini comme suit:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/META-INF/spring/applicationContext-test.xml" })
@TransactionConfiguration
@Transactional
public class InventoryControllerTest extends AbstractTransactionalJUnit4SpringContextTests {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
private AnnotationMethodHandlerAdapter handlerAdapter;
@Before
public void setUp() throws Exception {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
handlerAdapter = applicationContext
.getBean(AnnotationMethodHandlerAdapter.class);
}
//... tests
}
Donc, comme je l'ai dit, si j'ai commencé l'application une fois avant, tout fonctionne bien.
J'ai donc modifié la configuration de l'emplacement de
emplacements = { "classpath/META-INF/spring/applicationContext-test.xml" })
Mais sans effort, même une exception, comme mentionné ci-dessus.
La seule façon d'obtenir de plus amples cet emplacement est-il:
emplacements = { "classpath*:applicationContext-test.xml" })
Puis je bénéficier de cette exception:
Pas de correspondance bean de type [javax.sql.Source de données] trouvé pour la dépendance: attendre au moins 1 fève qui se qualifie comme autowire candidat à cette dépendance. La dépendance des annotations: {}
Mais qui est source de confusion, parce que j'ai vraiment avoir une source de données dans mon test fichier de contexte:
<bean class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" id="dataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:mem:testdb;sql.syntax_ora=true" />
<property name="username" value="some" />
<property name="password" value="some" />
</bean>
EIDT 2
Après avoir reconnu que le problème n'est RunWith(...) et en étendant le printemps de la classe en même temps et en supprimant tous les caractères génériques de l'emplacement du chemin d'accès. Je bénéficier de cette exception:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [META-INF/spring/applicationContext-test.xml]: Cannot resolve reference to bean 'entityManagerFactory' while setting bean property 'entityManagerFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/spring/applicationContext-test.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No persistence unit with name 'persistenceUnitTest' found
... 24 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/spring/applicationContext-test.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No persistence unit with name 'persistenceUnitTest' found
... 40 more
Caused by: java.lang.IllegalArgumentException: No persistence unit with name 'persistenceUnitTest' found)
... 47 more
Je serais vraiment reconnaissant de toute aide!
Merci d'avance
- Qu'essayez-vous de test? - nous l'unité de test de notre printemps contrôleurs en dehors du contexte de l'application.
- Est-ce un projet maven, et que vous utilisez eclipse?
- Oui @ Bedwyr: Parce que je veux vérifier si le répartiteur est de travailler correctement. C'est une sorte de integrationTest où j'ai besoin du contexte pour
Vous devez vous connecter pour publier un commentaire.
Il doit y avoir un
:
entreclasspath
et le Chemin d'accès, ainsi que le chemin ne doit pas commencer par/
. Donc la syntaxe correcte serait:ou un peu plus court formulaire
Un autre problème, trouvé par vous-même que vous devez utiliser
@ContextConfiguration
OUAbstractTransactionalJUnit4SpringContextTests
. Voici la accoding note de Java Doc deAbstractTransactonalJUnit4SpringContextTests
>
Remarque: cette classe ne sert qu'à titre de commodité pour l'extension. Si vous n'avez pas
souhaitez pour vos classes de test pour être attaché à un Ressort spécifique de la hiérarchie de classe,
vous pouvez configurer vos propres classes de test en utilisant
{@link SpringJUnit4ClassRunner}, {@link ContextConfiguration
@ContextConfiguration}, {@link TestExecutionListeners
@TestExecutionListeners}, {@link Transactionnelle @Transactional},
etc.
Le problème du démarrage:
Eclipse ne copie pas les ressources de
src\test\resources
dans le répertoire cible. Si vous avez besoin d'un outil ou quelque chose qui le font pour vous. Vous avez trouvé un moyen: le démarrage de l'application. Un second serait en cours d'exécutionmaven test
à partir d'eclipse.