2015-11-26 5 views
5

< टी एल इंजेक्शन नहीं, डॉ>स्प्रिंग dependenices ककड़ी

समस्या: मैं ककड़ी-JVM और स्प्रिंग का उपयोग कर रहा एकीकरण परीक्षण के लिए। परीक्षण चरण वर्ग में एक स्वायत्त वर्ग नहीं बनाया जा रहा है और शून्य है।

</टी एल; डॉ>

परीक्षण स्थानीय स्तर पर काम करते हैं लेकिन निर्माण सर्वर पर विफल, एक अशक्त सूचक के साथ जब autowired सेम पर एक विधि कॉल करने का प्रयास किया जाता है।

ढेर

  • जावा 1.8 (स्थानीय और निर्माण सर्वर)
  • Maven 3.3.9 (स्थानीय और निर्माण सर्वर)
  • स्थानीय: Windows 8 बिल्ड सर्वर: Ubuntu (नहीं कर सकते थाह यह एक फर्क नहीं पड़ता)

मैं क्या करने की कोशिश की

समस्या वर्ग @Component टिप्पणी की जाती है, मैं @Component एनोटेशन को दूर करने और वसंत संदर्भ में दर्ज की कोशिश की - यह कोई प्रभाव नहीं पड़ा।

डिबग करने के लिए स्प्रिंग लॉग स्तर की स्थापना बहुत कम और चिंता के लिए कुछ भी नहीं पता चला है। ककड़ी धावक (@RunWith (ककड़ी.क्लास) का उपयोग करने वाले परीक्षणों के लिए, मैं वसंत से अपेक्षाकृत कम लॉग देखता हूं। स्प्रिंगजुनिट 4Runner का उपयोग करने वाले असंबद्ध परीक्षणों की तुलना में लगभग कोई भी नहीं।

मैं एक परीक्षण ककड़ी धावक के बजाय SpringJunit4Runner उपयोग करता है और autowires समस्या वर्ग, यह ठीक काम किया है कि लिखा है, कक्षा शून्य नहीं थी।

कोड

पोम

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>com.foo</groupId> 
     <artifactId>matching-engine</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <artifactId>core</artifactId> 
    <name>core</name> 
    <description>core matching engine</description> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>4.1.6.RELEASE</version> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>4.1.6.RELEASE</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.1.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-core</artifactId> 
      <version>1.10.19</version> 
     </dependency> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <version>1.4.186</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-java8</artifactId> 
      <version>1.2.2</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-spring</artifactId> 
      <version>1.2.2</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-junit</artifactId> 
      <version>1.2.2</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>1.7.13</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.13 </version> 
     </dependency> 
    </dependencies> 

</project> 

ककड़ी स्प्रिंग संदर्भ (Cucumber.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" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 

    <context:component-scan base-package="com.foo.matching" /> 
    <context:annotation-config/> 
    <import resource="matching-engine-spring-context-TEST.xml" /> 

</beans> 

स्प्रिंग परीक्षण (मिलान इंजन वसंत-संदर्भ टेस्ट में इस्तेमाल किया संदर्भ। एक्सएमएल)

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 
<!-- Added this when I removed @Component from its class definition --> 
    <bean id="testHelper" class="com.foo.matching.test.common.TestHelper"/> 
    <bean id="orderTimeArrivalService" class="com.foo.matching.orderbook.MockOrderArrivalTimeService"/> 
    <bean id="tradeExecutionService" class="com.foo.matching.execution.MockTradeExecutionService"/> 
    <bean id="orderBookService" class="com.foo.matching.orderbook.TestOrderBookService"/> 

</beans> 

यह निर्माण सर्वर पर काम नहीं करता है (ठीक स्थानीय स्तर पर):

import org.junit.runner.RunWith; 

import cucumber.api.CucumberOptions; 
import cucumber.api.junit.Cucumber; 

@RunWith(Cucumber.class) 
@CucumberOptions(plugin = {"pretty", "html:target/cucumber"}) 
public class MarketOrderTest { 

} 

public class MarketOrderSteps { 

    @Autowired 
    private TestHelper testHelper; 

    @Given("^The order book looks like this before the trade is placed:$") 
    public void setupOrderBook(List<LimitOrder> orders) { 
     System.out.println("TestHelper: " + testHelper); 
     testHelper.setupOrderBook(orders); 
    } 

यह निर्माण सर्वर पर ठीक काम करता है और स्थानीय स्तर पर, मुझे प्रमुख मुद्दा विश्वास करने के लिए ककड़ी के साथ कहीं निहित है/जिस तरह से मैंने इसे कॉन्फ़िगर किया गया।

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:*Cucumber.xml") 
public class SpringTest{ 

    @Autowired 
    private TestHelper testHelper; 

    @Test 
    public void test() { 
     assertNotNull(testHelper); 
    } 
+0

ककड़ी को 1.2.4 (सभी ककड़ी info.cukes निर्भरताओं) में अपग्रेड करने के बाद यह काम करता है। अभी भी यह समझा नहीं जा सकता कि यह विंडोज़ पर 1.2.2 के साथ ठीक क्यों काम करता है, न कि बिल्ड सर्वर पर। इसके अलावा, अपग्रेड के बाद, मुझे ककड़ी धावक के साथ चलने वाले परीक्षणों के लिए डीबग स्तर पर स्प्रिंग लॉगिंग की अपेक्षित मात्रा दिखाई देती है। – AfterWorkGuinness

+0

उल्लेख करने के लिए भूल गए: अपग्रेड के बाद काम करने के लिए मुझे अपने सभी चरण def कक्षाओं में @ContextConfiguration ("classpath: * Cucumber.xml") जोड़ने की आवश्यकता थी। – AfterWorkGuinness

उत्तर

6

मैं अपने खुद के सवालों का जवाब दे नफरत है, लेकिन मैं समाधान मिल गया है।

  1. ककड़ी को अपग्रेड करें (सभी ककड़ी info.cukes निर्भरता) 1.2 तक।4
  2. @ContextConfiguration जोड़ें ("classpath: * Cucumber.xml") मेरे सारे कदम डीईएफ़ कक्षाएं

अपग्रेड के बाद, मैं वसंत की उम्मीद राशि परीक्षण के लिए डिबग स्तर पर प्रवेश करने को देखने के साथ चलाने के लिए ककड़ी धावक।

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