2014-05-09 24 views
10

Używam Ogórka do automatyzacji testowania usług i kontrolerów w mojej aplikacji. Ponadto w krokach testowych używam narzędzia Cucumber Junit Runner @RunWith(Cucumber.class) . Muszę utworzyć instancję kontrolera i zastanawiałem się, czy mogę użyć Springa, żeby to wypromować. Poniższy kod pokazuje, co chcę zrobić.Czy mogę używać sprężyny do testowania sterownika w testach ogórka?

public class MvcTestSteps { 

//is it possible to do this ???? 
@Autowired 
private UserSkillsController userSkillsController; 



/* 
* Opens the target browser and page objects 
*/ 
@Before 
public void setup() { 
    //insted of doing it like this??? 
    userSkillsController = (UserSkillsController) appContext.getBean("userSkillsController"); 
    skillEntryDetails = new SkillEntryRecord(); 

} 
+2

autowiring z wiosną w ogórkowym-JVM jest wyjaśnione tutaj - http://liminescence.blogspot.com/2013/08/integration-testing-with-spring.html – nilesh

Odpowiedz

13

Użyłem ogórka-jvm, aby wyposażyć wiosnę w ogórek.

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

i import applicationContext.xml do 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 

w call CucumberIT.java @RunWith(Cucumber.class) i dodać CucumberOptions.

@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 { } 

W CucumberStepDefs.java można @Autowired Wiosna

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

    @Autowired 
    SpringDAO dao; 

    @Autowired 
    SpringService service; 
} 
4

Oprócz odpowiedzi Jewel powyżej nie zapomnij dodać własnymi dodatkowymi zależnościami wiosennych jako „ogórek wiosny” artefakt wydaje się tylko pod warunkiem "Klej" pomiędzy ogórkiem a wiosną.

W moim przypadku dostałem Spring Injection do pracy w moich definicjach krokowych z następującą dodaną zależnością.

<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 

mój krok Definicja:

@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

Właśnie zrobiłem ogórek i wiosnę pracując z konfiguracją opartą na Javie i myślę, że warto tu się podzielić. tutaj co mam zrobić:

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

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

} 
} 

moja klasa krok defintion:

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

i tu klasa Test:

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

a polecenie Maven jest:

mvn -Denvironment=dev clean test 

the mav pl zależnościami mam w pom są:

<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

Było to bardzo pomocne, biorąc pod uwagę, że dokumentacja, którą znalazłem dla Ogórek i Wiosna, jest bardzo rzadka. – PCalouche

+0

jest to bardzo pomocne. Czy możesz mi udostępnić swój plik zależności? –

+0

Edytowałem, mam nadzieję, że to pomaga – ttati