2015-01-18 20 views
14

Spring kullanarak Dao sınıflarımdan birinde Birim sınaması yürütmem gerekiyor.TestContextBootstrapper - Spring Unit sınaması başlatılamadı

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:app-config.xml"}) 
@ActiveProfiles("local") 
public class HouseDaoTest { 

    @Autowired 
    HouseDataDao houseDataDao; 

    @Test 
    public void saveTest(){ 
     HouseData data = new HouseData(); 
     Address add = new Address(); 
     // Truncating for sake of simplicity 
     houseDataDao.save(data); 
    } 
} 

Ve My fasulye yapılandırma dosyaları:

app-config.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
    <import resource="BeanConfiguration-localhost.xml"/> 
    <import resource="BeanConfiguration-production.xml"/> 
</beans> 

BeanConfiguration-localhost.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans profile="local" 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 
    <context:annotation-config /> 
    <tx:annotation-driven /> 
    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/dbtest" /> 
     <property name="username" value="root" /> 
     <property name="password" value="" /> 
    </bean> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <!-- Tuncated for sake of simplicity --> 
    </bean> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
    <!-- Project Specific Beans --> 
    <bean id="HouseDataDao" class="com.datasaver.dao.HouseDataDaoImpl"></bean> 
</beans> 

İşte benim birim testidir BeanConfiguration-production.xml, içinde <beans profile="production" ... dışında yukarıdaki ile aynıdır.

Ben sadece aşağıdaki durum atma başarısız mvn test yapan bir maven testi çalıştırdığınızda: StackTrace Caused by: java.lang.NoSuchMethodError: org.springframework.beans.BeanUtils.instantiateClass içerdiğinden Ben bir bağımlılık ya da bir şey eksik gibi

java.lang.IllegalStateException: Could not load TestContextBootstrapper [class org.springframework.test.context.support.DefaultTestContextBootstrapper]. Specify @BootstrapWith's 'value' attribute or make the default bootstrapper class available. 
    at org.springframework.test.context.BootstrapUtils.resolveTestContextBootstrapper(BootstrapUtils.java:87) 
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:102) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:124) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:115) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:250) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 
Caused by: java.lang.NoSuchMethodError: org.springframework.beans.BeanUtils.instantiateClass(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object; 
    at org.springframework.test.context.BootstrapUtils.resolveTestContextBootstrapper(BootstrapUtils.java:81) 
    ... 25 more 

görünüyor.

... 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
     <version>2.5.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>4.1.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.1.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
    </dependency> 
... 

cevap

1

Maarten doğrudur. İşte benim için çalıştı pom.xml içinde bağımlılıkları benim yeni listesi: Benim durumumda

<dependencies> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.34</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate</artifactId> 
     <version>3.5.4-Final</version> 
     <type>pom</type> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.4.0.GA</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>3.3.0.ga</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
     <version>2.5.6</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
    </dependency> 
    <dependency> 
     <groupId>javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.12.1.GA</version> 
    </dependency> 
</dependencies> 
+0

Spring Framework 2.5.6 modüllerini "spring-test" 4.1 ile karıştırmamalısınız **, çünkü temelde çalışmak için _not_ garantili. –

20

Size çok yenisi ile taban bahar (2.5.6) bir eski sürümünü kullananlar beri bir sürüm çakışması muhtemelen (4.1.4: Burada

benim pom.xml yılında Spring'in bağımlılık listesi .RELEASE) Testiniz için, içerik kapsamında

+3

Kesinlikle bir sürüm çakışmasıdır. Spring Framework 4.1'de 'TestContextBootstrapper' tanıtıldı. Böylelikle "ilkbahar-testi" 4.1 'bahar-fasulyesi', 'yay-çekirdeği' nin 4.1 versiyonunu gerektirmektedir. Genel olarak, kullanılan "yay-testi" versiyonu, diğer tüm modüllerin çekirdeği ile ilgili Spring Framework'den eşleşmelidir. –

+0

Seni seviyorum (geliştirici-2 geliştirici bir şekilde) –

1

o ActiveMQ-hepsi neden olduğu bir sürüm çakışması oldu. Bu bağımlılık (benim durumumdaki 5.12.2) baharın uyumsuz bir versiyonunu içeriyor (sadece 4.3.4 yayına yükseltildim). Bu yüzden, birkaç saatlik hata ayıklamadan tasarruf edin ve favori IDE'nizdeki Bağımlılık Hiyerarşisini kontrol etmeyin, aynı zamanda org.springframework paketlerini gömüp gömülmediğini görmek için bu jar dosyalarının içine bakın.

3

Bahar Bağlamı, Yay Çekirdek, Yay testi sürümünü aynı tutun. Benim için her 3 için 4.1.6 ve bu benim sürüm çakışmasını çözdü.