Bonjour,
J'utilise Spring pour tester un DAO CapteurDaoImpl.
L'interface DAO :
L'implémentation de l'interface :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package com.organisme.dao; import java.util.List; import com.organisme.model.capteur.Capteur; /** * Interface DAO de la gestion de persistance des objets Capteur. * */ public interface CapteurDao extends GenericDao<Capteur> { public Capteur getCapteur(Long id); public List<Capteur> getAllCapteurs(); public void saveCapteur(Capteur c); public void updateCapteur(Capteur c); public void deleteCapteur(Capteur c); }
La classe de test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 package com.organisme.daoImpl; import java.util.List; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import com.organisme.dao.CapteurDao; import com.organisme.model.capteur.Capteur; /** * Classe des objets DAO pour la gestion de la persistance des objets Capteur * */ @Component(value = "capteurDao") @Transactional public class CapteurDaoImpl extends GenericDaoImpl<Capteur> implements CapteurDao { @Override public void saveCapteur(Capteur c) { this.persist(c); } @Override public void updateCapteur(Capteur c) { this.merge(c); } @Override public void deleteCapteur(Capteur c) { this.remove(this.merge(c)); } @Override public Capteur getCapteur(Long id) { return this.get(id); } @Override public List<Capteur> getAllCapteurs() { return this.findAllRecords(); } }
La classe mère de test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 package com.organisme.daoImpl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Date; import java.util.List; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import com.organisme.dao.CapteurDao; import com.organisme.model.capteur.Capteur; import com.organisme.model.ressource.RessourceMaterielle.ETAT; public class CapteurDaoImplTest extends AbstractDaoImplTest { @Autowired private CapteurDao capteurDao; private final Capteur c1 = new Capteur(); private final Capteur c2 = new Capteur(); @Test public void test() { Date d = new Date(); c1.setMesure("5"); c1.setDateEtat(d); c1.setDateMES(d); c1.setEtat(ETAT.ARRET); c1.setNom("C1"); c1.setId(1L); c2.setMesure("6"); c2.setDateEtat(d); c2.setDateMES(d); c2.setEtat(ETAT.ARRET); c2.setNom("C2"); c2.setId(2L); capteurDao.saveCapteur(c1); Capteur c = capteurDao.getCapteur(1L); assertNotNull( "Il y a eu un problème lors de la persistence en base de données.", c); assertEquals( "Il y a eu un problème lors de la persistence en base de données.", "C1", c.getNom()); capteurDao.saveCapteur(c2); final List<Capteur> list = capteurDao.getAllCapteurs(); for (Capteur current : list) { final String name = current.getNom(); assertTrue( "Il y a eu un problème lors de la récupération à partir de la base de données.", name.equals("C1") || name.equals("C2")); } c1.setNom("new C1"); capteurDao.updateCapteur(c1); c = capteurDao.getCapteur(1L); assertEquals( "Il y a eu un problème lors de la mise à jour en base de données.", c.getNom(), "new C1"); capteurDao.deleteCapteur(c2); c = capteurDao.getCapteur(2L); assertNull( "Il y a eu un problème lors de la suppression de la base de données.", c); } }
L'application context :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 package com.organisme.daoImpl; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @ContextConfiguration(locations = { "calsspath*:/applicationContext-dao.xml" }) @RunWith(SpringJUnit4ClassRunner.class) public class AbstractDaoImplTest { }
J'obtiens cette erreur. Je ne c'est pas pourquoi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- définition de l'entity manager factory --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/> </property> <property name="jpaProperties" ref="jpaProperties"/> <property name="persistenceXmlLocation" value="classpath:persistence.xml"/> </bean> <!-- configuration de l'adapteur JPA --> <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="true" /> <property name="generateDdl" value="false"/> <property name="databasePlatform" value="${db.dialect}"/> </bean> <!-- configuration de la datasource --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.driver}" /> <property name="url" value="${db.url}" /> <property name="username" value="${db.username}" /> <property name="password" value="${db.password}" /> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:/db.properties</value> </list> </property> </bean> <util:properties id="jpaProperties"> <prop key="hibernate.cache.provider_class"> org.hibernate.cache.NoCacheProvider </prop> <prop key="hibernate.cache.use_query_cache">false</prop> <prop key="hibernate.cache.use_second_level_cache">false</prop> </util:properties> <!-- gestion des transactions --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!-- activation de la configuration d'un comportement transactionnel en utilisant les annotations --> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- post-processors for all standard config annotations --> <context:component-scan base-package="com.organisme.dao.impl" /> <context:annotation-config/> </beans>
Avez-vous des idées ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.organisme.daoImpl.CapteurDaoImplTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.organisme.dao.CapteurDao com.organisme.daoImpl.CapteurDaoImplTest.capteurDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.organisme.dao.CapteurDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:374) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.organisme.dao.CapteurDao com.organisme.daoImpl.CapteurDaoImplTest.capteurDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.organisme.dao.CapteurDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) ... 26 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.organisme.dao.CapteurDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:952) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:821) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) ... 28 more
Cordialement.
Partager