使用Cucumber和Espresso进行Android自动测试

时间:2016-10-13 10:49:46

标签: android cucumber android-testing android-espresso

我有Cucumber的问题,我无法启动测试,我总是遇到同样的问题,并且不知道如何修复它。

当我运行测试时,我收到了这条消息:

Started running tests
Test running failed: Instrumentation run failed due to 'cucumber.runtime.CucumberException'
Empty test suite.

我的build.gradle

android {
....
sourceSets {
        androidTest {
            assets.srcDirs = ['src/androidTest/assets']
        }
    }
}
dependencies {...
//Testing
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile('info.cukes:cucumber-android:1.2.4') {
    exclude module: 'cucumber-jvm-deps'
    exclude module: 'guava'
}
androidTestCompile 'info.cukes:cucumber-jvm-deps:1.0.3'

Cucumber Runner:

CucumberOptions(features = "features/Test.feature")
public class CucumberInstrumentationRunner extends MonitoringInstrumentation {

    private final CucumberInstrumentationCore instrumentationCore = new CucumberInstrumentationCore(this);

    @Override
    public void onCreate(final Bundle bundle) {
        super.onCreate(bundle);
        instrumentationCore.create(bundle);
        start();
    }

    @Override
    public void onStart() {
        waitForIdleSync();
        instrumentationCore.start();
    }
}

Test.feature

Scenario: Пользователь пытается авторизоваться используя неверные логин и пароль
Given I've launched "com.example.activities.LoginActivity"
When User 'User@User.com' singIn with password 'wrongPassword'
Then Check message about incorrect password

和LoginActivitySteps

public class LoginActivitySteps extends InstrumentationTestCase {

    // ViewInteractions

    private final ViewInteraction mEmailEdt = onView(withId(R.id.edt_email));
    private final ViewInteraction mPassEdt = onView(withId(R.id.edt_pass));
    private final ViewInteraction mLoginBtn = onView(withId(R.id.button_login));

    private Activity currentActivity;

    @Given("^I've launched \"([^\"]*)\"$")

    public void I_ve_launched_(String activityClassName)
            throws Throwable {
        String targetPackage = getInstrumentation().getTargetContext().getPackageName();
        Class<? extends Activity> activityClass =
                (Class<? extends Activity>) Class.forName(activityClassName);

        currentActivity = launchActivity(targetPackage, activityClass, null);
    }

    @When("^User '(.+)'  singIn with password '(.+)'$")
    public void userLogin(String login, String password) {
        mEmailEdt.perform(clearText());
        mPassEdt.perform(clearText());
        mEmailEdt.perform(ViewActions.typeText(login));
        mPassEdt.perform(ViewActions.typeText(password));
        mLoginBtn.perform(ViewActions.click());
    }

    @Then("^Check message about incorrect password")
    public void checkTextOnScreen() {
            onView(withText("Wrong pass")).check(matches(isDisplayed()));

    }

1 个答案:

答案 0 :(得分:1)

我认为你错过了一些build.gradle配置部分,例如:

    testApplicationId "cucumber.cukeulator.test"
    testInstrumentationRunner "cucumber.cukeulator.test.Instrumentation"

检查此Cucumber示例build.gradle配置内容:https://github.com/cucumber/cucumber-jvm/blob/master/examples/android/android-studio/Cukeulator/app/build.gradle

希望它会有所帮助