我使用Spring框架3.0.5構建一個web應用程序。我使用@Configuration註釋來配置我的域對象,並且一些域對象具有會話範圍。當我使用jUnit 4.8.2編寫單元測試時,AnnotationConfigWebApplicationContext
變量無法獲取在配置類中定義的bean。如何在單元測試中使用AnnotationConfigWebApplicationContext(Spring框架)加載配置類
我總是得到以下情況除外:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'country' is defined
是否有任何人誰可以給我一些建議這個問題?非常感謝!
這是我的配置類,單元測試類,DAO類和域對象類。 (我用的註解配置的應用,而不是XML)
配置類:
@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();
}
}
測試超類:
@RunWith(SpringJUnit4ClassRunner.class)
public class TestENV
{
protected AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext;
@Before
public void setUp()
{
annotationConfigWebApplicationContext = new AnnotationConfigWebApplicationContext();
annotationConfigWebApplicationContext.refresh();
}
}
的單元測試類:
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 */
}
}
更新
也許我提出這個問題太複雜了,你知道,當我們使用AnnotationConfigApplicationContext
,我們可以使用下面的代碼來註冊bean定義。
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
annotationConfigApplicationContext.register(TestProcessUnitConfig.class, OtherClazz.class);
而且在我的項目,我用Spring MVC的註解與支持,我用AnnotationConfigWebApplicationContext
代替AnnotationConfigApplicationContext
。
雖然它們非常相似,AnnotationConfigWebApplicationContext
不提供「註冊」功能。
而我只是想知道是否有另一種方法來將bean定義註冊到AnnotationConfigWebApplicationContext
或不。
格式使用CTRL + K。現在是不可讀的代碼。並省略不重要的部分。 – Bozho 2010-11-11 12:01:23