J'utilise Spring framework 3.0.5 pour créer une application Web. J'utilise l'annotation @Configuration pour configurer mon objet de domaine, et certains des objets de domaine ont une portée de session. Et quand j'écris un test unitaire utilisant jUnit 4.8.2, la variable AnnotationConfigWebApplicationContext
ne peut pas obtenir les beans qui sont définis dans la classe de configuration.Comment utiliser AnnotationConfigWebApplicationContext (Spring framework) pour charger la classe de configuration pendant le test unitaire
Je reçois toujours les exceptions suivantes:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'country' is defined
Est-ce qu'il ya quelqu'un qui peut me donner quelques conseils à ce problème? Merci beaucoup!
Voici ma classe de configuration, la classe de test unitaire, la classe DAO et la classe d'objets de domaine. (Je annotation pour configurer l'application au lieu de xml)
classe de configuration:
@Configuration
public class RegionDomainObj
{
/**
* Define City Domain Object bean
*/
@Bean
@Scope("session")
public CityImp city()
{
return new CityImp();
}
/**
* Define City IP Domain Object bean
*/
@Bean
@Scope("session")
public CityIPImp cityIP()
{
return new CityIPImp();
}
/**
* Define Country Domain Object bean
*/
@Bean
@Scope("session")
public CountryImp country()
{
return new CountryImp();
}
/**
* Define Country IP Domain Object bean
*/
@Bean
@Scope("session")
public CountryIPImp countryIP()
{
return new CountryIPImp();
}
/**
* Define Locale Domain Object bean
*/
@Bean
@Scope("session")
public LocaleImp locale()
{
return new LocaleImp();
}
/**
* Define Region Domain Object bean
*/
@Bean
@Scope("session")
public RegionImp region()
{
return new RegionImp();
}
/**
* Define Top Level Domain Domain Object bean
*/
@Bean
@Scope("session")
public TopLevelDomainImp topLevelDomain()
{
return new TopLevelDomainImp();
}
}
test super classe:
@RunWith(SpringJUnit4ClassRunner.class)
public class TestENV
{
protected AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext;
@Before
public void setUp()
{
annotationConfigWebApplicationContext = new AnnotationConfigWebApplicationContext();
annotationConfigWebApplicationContext.refresh();
}
}
Unité Classe d'essai:
public class CountryDAOTest extends TestENV
{
private ICountryDAO countryDAO;
private ICountry country;
@Before
public void setUpLocalTestENV()
{
this.country = (ICountry) this.annotationConfigWebApplicationContext.getBean("country");
this.countryDAO = (ICountryDAO) this.annotationConfigWebApplicationContext.getBean("crazyamsCountryDAO");
}
/* Test save country */
@Test
public void testSaveCountry()
{
this.country.setCode("AU");
this.country.setName("Australia");
this.countryDAO.save(this.country);
/* ignore the assert functions */
}
}
Mise à jour
Peut-être que je fais ce problème trop complexe, vous le savez, lorsque nous utilisons AnnotationConfigApplicationContext
, nous pouvons utiliser le code suivant pour enregistrer des définitions de haricots.
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
annotationConfigApplicationContext.register(TestProcessUnitConfig.class, OtherClazz.class);
Et dans mon projet, j'utiliser Spring MVC avec l'aide d'annotations, et je l'utilise AnnotationConfigWebApplicationContext
au lieu de AnnotationConfigApplicationContext
.
Bien qu'ils soient très similaires, AnnotationConfigWebApplicationContext
ne fournit pas de fonction de "registre".
Et je veux juste savoir s'il existe une autre façon d'enregistrer la définition du bean dans AnnotationConfigWebApplicationContext
ou non.
Format votre code en utilisant CTRL + K. Il est maintenant illisible. Et omettez les parties sans importance. – Bozho