Bonjour,

J'utilise Spring pour tester un DAO CapteurDaoImpl.

L'interface DAO :
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);
 
}
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
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 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);
	}
 
}
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
 
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 {
 
}
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
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>
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
 
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
Avez-vous des idées ?

Cordialement.