2015-11-26 12 views
5

< TL; DR>dependenices mùa xuân không được tiêm với dưa chuột

Vấn đề: Tôi đang sử dụng dưa chuột-JVM và mùa xuân cho các xét nghiệm hội nhập. Một lớp autowired trong lớp bước thử nghiệm không được tạo ra và là null.

</TL; DR>

Các xét nghiệm làm việc tại địa phương nhưng thất bại trên máy chủ xây dựng, với một con trỏ null khi một cuộc gọi phương pháp trên đậu autowired là cố gắng.

stack

  • Java 1.8 (địa phương và xây dựng máy chủ)
  • Maven 3.3.9 (địa phương và xây dựng máy chủ)
  • địa phương: Windows 8, Xây dựng Server: Ubuntu (có thể không hiểu được điều này làm cho một sự khác biệt)

Những gì tôi cố gắng

Lớp vấn đề được chú thích @Component, tôi đã thử xóa chú thích @Component và đăng ký chú thích đó trong ngữ cảnh mùa xuân - điều này không có hiệu lực.

Đặt mức nhật ký mùa xuân thành DEBUG cho thấy rất ít và không có gì đáng lo ngại. Đối với các thử nghiệm sử dụng nhân vật Cucumber (@RunWith (Cucumber.class)), tôi thấy các bản ghi tương đối nhỏ từ Spring. Hầu như không ai so sánh với các bài kiểm tra không liên quan sử dụng SpringJunit4Runner.

Tôi đã viết một bài kiểm tra sử dụng SpringJunit4Runner thay vì nhân vật Cucumber và autowires lớp vấn đề, nó làm việc tốt; lớp học không phải là null.

POM

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

bối cảnh Dưa chuột mùa xuân (Cucumber.xml) bối cảnh

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

mùa xuân được sử dụng trong các bài kiểm tra (kết hợp động cơ xuân-context-TEST. 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"> 
<!-- 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> 

này không hoạt động trên máy chủ xây dựng (tốt tại địa phương):

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

này hoạt động tốt trên máy chủ xây dựng và địa phương, dẫn tôi để tin rằng vấn đề nằm ở đâu đó với dưa chuột/cách tôi đã đã định cấu hình nó.

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

    @Autowired 
    private TestHelper testHelper; 

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

Sau khi nâng cấp lên dưa chuột lên 1.2.4 (tất cả phụ thuộc vào thông tin dưa chuột) nó hoạt động. Vẫn không thể giải thích tại sao nó hoạt động tốt với 1.2.2 trên các cửa sổ chứ không phải trên máy chủ xây dựng. Ngoài ra, sau khi nâng cấp, tôi thấy số lượng dự kiến ​​ghi nhật ký ở cấp độ gỡ lỗi cho các thử nghiệm chạy với nhân vật Cucumber. – AfterWorkGuinness

+0

Quên đề cập: Tôi cần thêm @ContextConfiguration ("classpath: * Cucumber.xml") vào tất cả các lớp Def step của tôi để nó hoạt động sau khi nâng cấp. – AfterWorkGuinness

Trả lời

6

Tôi ghét trả lời các câu hỏi của riêng mình nhưng tôi đã tìm ra giải pháp.

  1. Nâng cấp dưa chuột (tất cả phụ thuộc thông tin dưa chuột) lên 1.2.4
  2. Thêm @ContextConfiguration ("classpath: * Cucumber.xml") cho tất cả các lớp def Bước tôi

Sau khi nâng cấp, tôi thấy giá trị dự kiến ​​của Spring đăng nhập ở cấp debug cho các bài kiểm tra chạy với Á hậu dưa chuột.

Các vấn đề liên quan