我想在我的Spring MVC应用程序中引入JUnit,并且我正在使用Java和xml配置(我的java配置使用xml来自动装入某个变量)的组合来定义我的bean:嵌套的Java和Xml的JUnit弹簧配置
// 1 - 我的测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MvcConfiguration_Test.class)
@WebAppConfiguration
public class ClassTest {
@Autowired
@Qualifier("databaseTest")
DataBaseConn conn;
@Test
public void test() {
// do some stuff
}
}
// 2 - 爪哇配置
@EnableWebMvc
@Configuration
@ImportResource({ "applicationContext.xml" }) // this file is in classpath, actually I'm using "classpath:**/applicationContext.xml" but the next step is to move this file in resources/test :)
public class MvcConfiguration_Test extends MvcConf{
@Autowired
String dbName; // defined in applicationContext.xml
@Bean
public DataBaseConn databaseTest(){
DataBaseConn conn = new DataBaseConn();
conn.addDataSource(dbName, jndi, user, pwd)
return conn;
}
}
// 3 - xml配置 - applicationContext.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans ...
<context:annotation-config />
<bean id="dbName" class="java.lang.String">
<constructor-arg value="myDb"/>
</bean>
</beans>
当我启动我的JUnit测试,我得到以下错误:
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcConfiguration_Test': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: java.lang.String package.MvcConfiguration_Test.dbName; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.
的解决方法是丝肮脏的方式分贝的名字: 字符串DBNAME =“MYDB”; 但这不是所需的解决方案:)
PS。我的MVC应用程序被自动装配值correclty(我只从MvcConfiguration删除@ComponentScan("ct.cbi")
读取测试配置
自动装配字符串bean对我来说似乎很奇怪。我觉得从属性文件中读取这个值是更好的方法。这当然不是我以前见过的。 – Plog