Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Android support for Cucumber
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.

Android support for Cucumber

This is a work in progress. It works well enough but isn't considered stable.


This code is open-sourced under The MIT License. The goal is get it included upstream into the cucumber-jvm project.


  1. Include cucumber-android into your application's test project, either as a jar (recommended) or as a library project.

  2. Add an additional <instrumentation> element inside your test project's AndroidManifest.xml:

        android:targetPackage="com.example.calculator" />

    Remember to set targetPackage to your application's package name.

  3. Create a new package such as com.example.calculator.test.cucumber. If your existing unit tests are inside your test project's top-level package (com.example.calculator.test), consider moving them into a sub-package (such as com.example.calculator.test.unit).

  4. Create a new "Android Test" run configuration in your IDE and set the instrumentation runner to Set it to run all tests inside the package you just created.

Writing Features and Step Definitions

  1. Features are stored as Android "raw" resources. Create a directory res/raw/features and place your features here. For consistency, name your files with a .feature extension.

    For example, if you're writing tests for an RPN calculator app, the file res/raw/features/addition.feature may contain:

    Feature: Addition
       Scenario: Add two numbers
           Given I have entered 50 into the calculator
           And I have entered 70 into the calculator
           When I press add
           Then The result should be 120
  2. Each feature also needs a corresponding TestCase class which defines where to find the resource and which activity to start the test with. These classes must be inside the package you configured in your Run Configuration (see above).

    This will be cleaned up in a future revision.

    @CucumberTest(resource = R.raw.addition) public class AdditionFeature extends CucumberActivityInstrumentationTestCase2 { public AdditionFeature() { super(MainActivity.class); } }

  3. For consistency, step definitions should be defined in their own package such as com.example.calculator.test.cucumber.steps and must extend the TestCaseStepDefs class.

    The following example also demonstrates how to use Robotium in your step definitions.

    public class CalculatorSteps extends TestCaseStepDefs<ActivityInstrumentationTestCase2<?>> {
        private Solo mRobotium;
        public void before() {
            mRobotium = new Solo(getTestCase().getInstrumentation(), getTestCase().getActivity());
        @Given("I have entered (\\d+) into the calculator")
        public void i_have_entered(int number) {
            mRobotium.enterText(0, String.valueOf(number));
        @When("I press add")
        public void i_press_add() {
        @Then("The result should be (\\d+)")
        public void the_result_should_be(int expected_result) {
Something went wrong with that request. Please try again.