Example for the Software Quality and Testing course on how to easily separate step definitions across different step definiton classes, and by that means improve reuability of the step definitions.
Created
May 5, 2016 11:59
-
-
Save jwgmeligmeyling/d22656e91e3851dc4ed0fcbd92da15ff to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Feature: 1. Simple number arithmetic | |
As a user | |
I want to be able to do simple number arithmetic | |
So that I can answer my exam questions | |
Scenario: 1. Add two numbers | |
Given the numbers 3 and 4 | |
When I add the two numbers | |
Then the result should be 7 | |
Scenario: 2. Subtract two numbers | |
Given the numbers 2 and 1 | |
When I subtract the two numbers | |
Then the result should be 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package nl.tudelft.cucumber; | |
import java.io.Closeable; | |
public class Calculator implements Closeable { | |
public int add(int a, int b) { | |
return a + b; | |
} | |
public int subtract(int a, int b) { | |
return a -b; | |
} | |
@Override | |
public void close() { | |
// Some hypothetical close function | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package nl.tudelft.cucumber; | |
import cucumber.api.java.After; | |
import cucumber.api.java.Before; | |
import cucumber.api.java.en.Then; | |
import cucumber.api.java.en.When; | |
import static org.junit.Assert.assertThat; | |
import static org.hamcrest.Matchers.equalTo; | |
public class CalculatorStepDefinitions { | |
private Calculator calculator; | |
private int result; | |
@Before | |
public void setup() { | |
calculator = new Calculator(); | |
} | |
@When("^I add the two numbers$") | |
public void iAddTheTwoNumbers() throws Throwable { | |
result = calculator.add(NumberStepDefinitions.A, NumberStepDefinitions.B); | |
} | |
@Then("^the result should be (\\d+)$") | |
public void theResultShouldBe(int expectedResult) throws Throwable { | |
assertThat(result, equalTo(expectedResult)); | |
} | |
@When("^I subtract the two numbers$") | |
public void iSubtractTheTwoNumbers() throws Throwable { | |
result = calculator.subtract(NumberStepDefinitions.A, NumberStepDefinitions.B); | |
} | |
@After | |
public void tearDown() { | |
calculator.close(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package nl.tudelft.cucumber; | |
import cucumber.api.CucumberOptions; | |
import cucumber.api.SnippetType; | |
import cucumber.api.junit.Cucumber; | |
import org.junit.runner.RunWith; | |
@RunWith(Cucumber.class) | |
@CucumberOptions( | |
plugin = {"pretty"}, | |
snippets = SnippetType.CAMELCASE, | |
features = "src/test/resources/features") | |
public class CucumberTest { | |
/** | |
* This class should be empty, step definitions should be in separate classes. | |
*/ | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package nl.tudelft.cucumber; | |
import cucumber.api.java.en.Given; | |
public class NumberStepDefinitions { | |
public static int A, B; | |
@Given("^the numbers (\\d+) and (\\d+)$") | |
public void theNumbersAnd(int first, int second) throws Throwable { | |
A = first; | |
B = second; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<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> | |
<groupId>cucumber.example</groupId> | |
<artifactId>example</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<properties> | |
<maven.compiler.source>1.8</maven.compiler.source> | |
<maven.compiler.target>1.8</maven.compiler.target> | |
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | |
<junit.version>4.12</junit.version> | |
<mockito.version>2.0.47-beta</mockito.version> | |
<hamcrest.version>1.3</hamcrest.version> | |
<cucumber.version>1.2.4</cucumber.version> | |
</properties> | |
<developers> | |
<developer> | |
<id>jgmeligmeyling</id> | |
<name>Jan-Willem Gmelig Meyling</name> | |
<email>[email protected]</email> | |
</developer> | |
</developers> | |
<organization> | |
<name>TU Delft</name> | |
<url>http://www.tudelft.nl/</url> | |
</organization> | |
<dependencies> | |
<dependency> | |
<groupId>junit</groupId> | |
<artifactId>junit</artifactId> | |
<version>${junit.version}</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.mockito</groupId> | |
<artifactId>mockito-core</artifactId> | |
<version>${mockito.version}</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.hamcrest</groupId> | |
<artifactId>hamcrest-library</artifactId> | |
<version>${hamcrest.version}</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>info.cukes</groupId> | |
<artifactId>cucumber-java</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> | |
</dependencies> | |
</project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment