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?
Antwort
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;
}
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>
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>
- 1. Wie verwenden Websites hitcounters, um den Verkehr zu steuern
- 2. Wie kann ich Feder 4.2 davon überzeugen, die OPTIONS-Anfrage an den Controller zu übergeben
- 3. Wie verwenden Sie MediaControllerCompat, um den aktuellen Player zu steuern?
- 4. Laravel - Kann ich die Validator-Instanz im Controller erneut verwenden?
- 5. Kann ich DisplayTemplates im Controller verwenden
- 6. Kann ich einen Controller verwenden, um _Layout.cshtml Informationen zu geben?
- 7. Feder MVC @Controller und Profile
- 8. Verwenden Sie den Crawler im Controller
- 9. Feder MVC Controller 404
- 10. Wie kann ich den Telefonanruf steuern?
- 11. Wo kann ich die QWizard-Taste steuern?
- 12. Angular ui-grid Verwenden Sie die selectedrow-Funktion, um den Inhalt einer Zeilenspalte zu steuern
- 13. Maven-Profile verwenden, um Build-Ausführung zu steuern
- 14. Wie setze ich den Timer im Controller?
- 15. Was ist die bessere Form, um Konfigurationsmanagement in der Organisation zu verwenden, um Dokumente zu steuern
- 16. Verwenden von .htaccess, um HTTPS auf bestimmten Seiten zu steuern
- 17. Controller im Frühjahr für die Formularverarbeitung
- 18. Wie kann ich Daten von Feder-Controller von Ajax bekommen?
- 19. Kann ich die if-Anweisung innerhalb eines Konstruktors verwenden, um den Wertebereich zu steuern, den die Parameter annehmen, ohne dass eine Ausnahme ausgelöst wird?
- 20. Wie bekomme ich die Suche, um den attr_accessor zu verwenden?
- 21. Post Ajax Daten Feder Controller
- 22. Sperren verwenden, um den Zugriff auf nicht threadsichere Bibliotheken zu steuern
- 23. Wie kann ich den GDI-Ausdruck verwenden, um das Expressdokument im Client zu drucken?
- 24. Wie verwende ich den Bit/Bit-Operator, um den Objektstatus zu steuern?
- 25. Ich kann nicht auf den Dienst im Controller zugreifen
- 26. Wie kann ich die Windows-Dateiauswahl mit Winkelmesser steuern
- 27. Feder ruft falsche Controller-Zuordnung auf
- 28. Kann ich Javascript verwenden, um die Sprache zu ändern?
- 29. Können wir den OBD-II-Anschluss verwenden, um ein Auto zu steuern?
- 30. Verwenden Sie die Eingabetaste, um zu den Eingängen zu gehen
autowiring mit Frühling in Gurken-jvm wird hier erklärt - http://liminescence.blogspot.com/2013/08/integration-testing-with-spring.html – nilesh