sid*_*ani 4 java spring unit-testing spring-mvc junit4
在我们的项目中,我们使用 spring 进行Junit
Junit 测试。我们使用@ContextConfiguration
注释来加载多个文件。我们有两个类AbstractContextJUnitTest
和ContextJUnitTest
并ContextJUnitTest
扩展AbstractContextJUnitTest
。
在代码流程中,我注意到多个文件中具有不同 bean 类型的相同 bean Id。当我测试这些 Junits 并收到以下错误时。
错误:
org.springframework.beans.factory.BeanNotOfRequiredTypeException:名为“voterId”的 Bean 预计为 [com.spring.test2.Student] 类型,但实际上为 [com.spring.test2.Parent] 类型
我的要求是学生 bean 应该加载 VoterId 而不是 Parent Bean。
下面是java文件和spring bean xml文件:
测试.xml:
<beans>
<context:annotation-config/>
<bean id="voterId" class="com.spring.test2.Parent">
<property name="Name" value="hai"/>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="system" />
<property name="password" value="system" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
测试1.xml
<beans>
<context:annotation-config/>
<bean id="voterId" class="com.spring.test2.Student">
<property name="name" value="hello"/>
<property name="number" value="2080"/>
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
AbstractContextJUnitTest.java
@ContextConfiguration(locations="classpath:/com/spring/test2/test1.xml")
public class AbstractContextJUnitTest extends AbstractTransactionalJUnit4SpringContextTests{
}
Run Code Online (Sandbox Code Playgroud)
ContextJUnitTest.java
@ContextConfiguration(locations={"classpath:/com/spring/test2/test.xml"})
public class ContextJUnitTest extends AbstractContextJUnitTest{
@Test
public void testStudent(){
Student stud=applicationContext.getBean("voterId",Student.class);
assertEquals(stud.getNumber(), 2080);
}
}
Run Code Online (Sandbox Code Playgroud)
你试过@Primary吗?
\n\n<bean id="voterId" class="com.spring.test2.Student" primary="true">\n <property name="name" value="hello"/>\n <property name="number" value="2080"/>\n</bean>\n
Run Code Online (Sandbox Code Playgroud)\n\n无论你需要什么,你都必须使用@Qualifiercom.spring.test2.Parent
。
或者您可以获取类型为以下的 bean:
\n\napplicationContext.getBeansOfType(Student.class).get("voterI\xe2\x80\x8c\xe2\x80\x8bd")\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
14235 次 |
最近记录: |