2014-05-09 2 views
10

Ich benutze Cucumber, um das Testen von Diensten und Controllern in meiner App zu automatisieren. Außerdem benutze ich den Cucumber Junit Runner @RunWith(Cucumber.class) in den Testschritten. Ich muss meinen Controller instanziieren und habe mich gefragt, ob ich Spring verwenden könnte, um dies zu automatisieren. Der folgende Code zeigt, was ich tun möchte.Kann ich die Feder verwenden, um den Controller im Gurkentest zu steuern?

+2

autowiring mit Frühling in Gurken-jvm wird hier erklärt - http://liminescence.blogspot.com/2013/08/integration-testing-with-spring.html – nilesh

Antwort

13

Ich benutzte Gurke-jvm, um Frühling in Gurke zu treiben.

<dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-core</artifactId> 
     <version>1.1.5</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-spring</artifactId> 
     <version>1.1.5</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>info.cukes</groupId> 
     <artifactId>cucumber-junit</artifactId> 
     <version>1.1.5</version> 
     <scope>test</scope> 
    </dependency> 

und Import applicationContext.xml in Cucumber.xml

<import resource="/applicationContext.xml" /> // refer to appContext in test package 
<context:component-scan base-package="com.me.pos.**.it" /> // scan package IT and StepDefs class 

In CucumberIT.java Anruf @RunWith(Cucumber.class) und die CucumberOptions hinzufügen.

@RunWith(Cucumber.class) 
@CucumberOptions(
    format = "pretty", 
    tags = {"[email protected]"}, 
    features = "src/test/resources/com/me/pos/service/it/" //refer to Feature file 
) 
public class CucumberIT { } 

In CucumberStepDefs.java können Sie @Autowired Frühling

@ContextConfiguration("classpath:cucumber.xml") 
public class CucumberStepDefs { 

    @Autowired 
    SpringDAO dao; 

    @Autowired 
    SpringService service; 
} 
4

Neben Jewel Antwort oben vergessen Sie nicht in Ihren eigenen zusätzlichen Feder Abhängigkeiten als "Gurken-spring" hinzufügen Artefakt scheint nur zur Verfügung gestellt der "Kleber" zwischen Gurke und Frühling.

In meinem Fall habe ich Spring Injection in meinen Step-Definitionen mit der folgenden zusätzlichen Abhängigkeit arbeiten.

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-test</artifactId> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <scope>test</scope> 
</dependency> 
..... Plus the rest of the cucumber dependencies 

Mein Schritt Definition:

@ContextConfiguration("/cucumber.xml") 
@PropertySource("classpath*:qa-test.properties") 
public class StepsDefinition { 

    @Autowired 
    private ServiceToInject serviceToInject; 
} 

CukesRunner

@RunWith(Cucumber.class) 
@CucumberOptions(format = { "pretty", "html:target/cucumber-html-report", "json:target/cucumber-json-report.json" }) 
public class CukesRunner {} 

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" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <import resource="classpath:applicationContext.xml"/> 
</beans> 

applicationContext.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.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="com.mypackage"/> 

    <bean id="propertiesPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="qa-test.properties"/> 
    </bean> 
    ---- rest of my beans 
    </beans> 
8

Ich habe gerade Gurke und Frühling arbeiten mit Java-basierten Konfiguration und ich denke, es ist es wert, hier zu teilen. hier, was ich getan habe:

@Configuration 
@ComponentScan(basePackages = { "com.*" }) 
@PropertySource("classpath:application-${environment}.properties") 
public class AppConfiguration { 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 

} 
} 

mein Schritt defintion Klasse:

@ContextConfiguration(classes= AppConfiguration.class) 
public class Stepdefs { 
@Autowired 
private MyBean mybean; 

und hier die Testklasse:

@RunWith(Cucumber.class) 
@CucumberOptions(format = { "pretty", "html:target/cucumber-html-report", "json:target/cucumber-json-report.json" }) 
@ContextConfiguration(classes= AppConfiguration.class) 
public class RunCucumberTest { 
} 

und der Maven-Befehl lautet:

mvn -Denvironment=dev clean test 

die mav en Abhängigkeiten ich in meinem pom haben, sind:

<dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-expression</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 

     <!--spring test--> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>${junit.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.hamcrest</groupId> 
      <artifactId>hamcrest-library</artifactId> 
      <version>${hamcrest.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <!--cucumber --> 
     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-java</artifactId> 
      <version>${cucumber.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-spring</artifactId> 
      <version>${cucumber.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-junit</artifactId> 
      <version>${cucumber.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-jvm</artifactId> 
      <version>${cucumber.version}</version> 
      <type>pom</type> 
     </dependency> 
+2

Dies war sehr hilfreich, da die Dokumentation, die ich für Gurke und Frühling gefunden habe, sehr spärlich ist. – PCalouche

+0

das ist sehr hilfreich. Können Sie mir Ihre Abhängigkeitsdatei mitteilen? –

+0

ich es bearbeitet, ich hoffe, es hilft – ttati

Verwandte Themen