2017-02-04 15 views
1

私たちのプロジェクトでは、JunitテストのためにJunitというスプリングを使用しています。複数ファイルの読み込みには@ContextConfigurationアノテーションを使用しています。 AbstractContextJUnitTestContextJUnitTestの2つのクラスとContextJUnitTestAbstractContextJUnitTestの2つのクラスがあります。コードフロー中に同じidのSpring Beanを優先する方法は?

私は別のBeanタイプで複数のファイルに同じ豆同上に気づきました。私がこれらのJunitsをテストしているとき、以下のエラーが表示されます。

エラー:

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'voterId' is expected to be of type [com.spring.test2.Student] but was actually of type [com.spring.test2.Parent]

私の要件は、学生BeanがVoterIdの代わりに親ビーンでロードする必要があります。

のtest.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> 

test1.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> 

AbstractContextJUnitTest.java

以下はJavaファイルと春の豆xmlファイルです

@ContextConfiguration(locations="classpath:/com/spring/test2/test1.xml") 
public class AbstractContextJUnitTest extends AbstractTransactionalJUnit4SpringContextTests{ 


} 

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); 
    } 
} 

答えて

1

@Primaryを試しましたか?

<bean id="voterId" class="com.spring.test2.Student" primary="true"> 
     <property name="name" value="hello"/> 
     <property name="number" value="2080"/> 
</bean> 

はあなたが必要な場所com.spring.test2.Parentため@Qualifierを使用する必要があります。

それともようなタイプを持つBeanを取得することができます:私は場所がJUnitのクラスの属性をオーバーライドすることができ

applicationContext.getBeansOfType(Student.class).get("voterI‌​d") 
+0

私は試しましたが動作しません –

+0

@sidharthapaniこれを試してください - 'applicationContext.getBeansOfType(Student.class).get(" voterId ")' – Arpit

1

あなたはその中のクラスを拡張してきたorder..andあなたのtest.xmlは、学生の持つ任意の豆を持っていないためと考えられます。したがって、継承に従うだけで、親が見つかりました。 以下の行では、まずtest.xml内のbeanのvoteridを探して見つけます。 ContextConfiguration(場所= {"classpath:/com/spring/test2/test.xml"})public class ContextJUnitTest

+0

。どのような方法を使ってもいいですか? –

+0

なぜあなたはそれをしますか?各xmlの親と学生の豆を交換してください...うまくいくはずです。 – LNP

+0

私が投稿したのは、自分のプロジェクトのサンプルの例です。しかし私のプロジェクトでは、これを変更すべきではありません。 –

関連する問題