2015-01-18 6 views
14

मुझे स्प्रिंग का उपयोग करके मेरे दाओ कक्षाओं में से एक पर यूनिट परीक्षण निष्पादित करना होगा।टेस्टकॉन्टेक्स्टबूटस्ट्रैप लोड नहीं कर सका - स्प्रिंग यूनिट परीक्षण

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

और मेरे सेम विन्यास फाइल:

एप्लिकेशन-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> 

कहाँ यहाँ मेरी इकाई परीक्षण है बीन कॉन्फिगरेशन-प्रोडक्शन.एक्सएमएल <beans profile="production" ... को छोड़कर उपरोक्त जैसा ही है।

जब मैं बस एक Maven परीक्षण mvn test कर यह निम्न अपवाद फेंक विफल रहता है निष्पादित करें:

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 

ऐसा लगता है कि मैं एक निर्भरता या कुछ याद आ रही है क्योंकि स्टैकट्रेस Caused by: java.lang.NoSuchMethodError: org.springframework.beans.BeanUtils.instantiateClass शामिल हैं।

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

उत्तर

1

मार्टन सही है। यहाँ pom.xml में निर्भरता जो मेरे लिए काम किया की मेरी नई सूची है:

<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

आपको वास्तव में ** वसंत फ्रेमवर्क 2.5.6 मॉड्यूल 'स्प्रिंग-टेस्ट' 4.1 के साथ मिश्रण नहीं करना चाहिए, क्योंकि मूल रूप से काम करने के लिए _not_ की गारंटी है। –

20

यह शायद एक संस्करण विरोध जब से तुम बहुत नए के साथ आधार वसंत (2.5.6) के एक पुराने संस्करण का उपयोग कर रहे हैं (4.1.4:

यहाँ मेरी pom.xml में स्प्रिंग की निर्भरता सूची है .RELEASE) आपके परीक्षण एन संदर्भ में

+3

यह निश्चित रूप से एक संस्करण संघर्ष है। स्प्रिंग फ्रेमवर्क 4.1 में 'TestContextBootstrapper' पेश किया गया था। इस प्रकार 'स्प्रिंग-टेस्ट' 4.1 को 'वसंत-बीन्स', 'स्प्रिंग-कोर' इत्यादि के संस्करण 4.1 की आवश्यकता होती है। सामान्यतः 'स्प्रिंग-टेस्ट' के संस्करण का उपयोग कोर स्प्रिंग फ्रेमवर्क से अन्य सभी मॉड्यूल के संस्करण से मेल खाना चाहिए। –

+0

मैं आपको प्यार करता हूं (एक डेवलपर-2-डेवलपर तरीके से) –

1

मेरे मामले में यह एक संस्करण ActiveMQ-सब की वजह से संघर्ष था। उस निर्भरता (मेरे मामले में 5.12.2) में वसंत का एक असंगत संस्करण शामिल है (मैं बस वसंत 4.3.4 में अपग्रेड किया गया)। तो, अपने आप को डीबगिंग के कुछ घंटों को बचाएं और न केवल अपने पसंदीदा आईडीई में निर्भरता पदानुक्रम की जांच करें, बल्कि उन जार फ़ाइलों के अंदर भी देखें, यह देखने के लिए कि कोई भी org.springframework संकुल एम्बेड कर रहा है या नहीं।

3

स्प्रिंग-कॉन्टेक्स्ट, स्प्रिंग-कोर, स्प्रिंग-टेस्ट के संस्करण को समान रखें। मेरे लिए यह सभी 3 के लिए 4.1.6 है, और इसने मेरे संस्करण संघर्ष को हल किया।

संबंधित मुद्दे