如何使Cucumber功能作为本地单元测试在Android项目中运行?

时间:2018-09-15 19:36:20

标签: java android android-studio cucumber cucumber-jvm

我有一个用Java编写的Android项目,正在Android Studio中进行。

我想用Cucumber进行一些内部组件的集成测试(注意:我知道这不是BDD方式,但是对我有用)。我希望测试可以使用gradlew test作为local unit tests(没有工具)运行,因为被测组件不能与Android SDK交互。

我的问题是,当我运行testImplementation 'io.cucumber:cucumber-java:3.0.2' testImplementation 'io.cucumber:cucumber-junit:3.0.2' testImplementation 'io.cucumber:cucumber-jvm:3.0.2' 时,Gradle无法识别和运行Cucumber功能。

到目前为止,这是我设置的方式:

  1. 将这些依赖项添加到我的应用程序的build.gradle中:

    android {
        ...
        sourceSets {
            test {
                assets.srcDirs = ['src/test/java/integrationTest/assets']
            }
        }
    }
    
  2. 此外,我还在其中添加了放置功能文件的路径:

    Steps1.java

    这基于以下文件夹结构:

    enter image description here

  3. 为步骤(splice)添加了一个类,如上所示。

我在这里想念什么?

2 个答案:

答案 0 :(得分:1)

您的功能文件可能没有被拾取,因为您没有包括跑步者。您可以创建JUnit Runner或使用Gradle cucumber plugin。我不确定这两者是否都能在Android中使用。

此外,您不需要 int first_number = 20; int second_number = 20; Optional<Integer> dummy = Optional.of(0); // Dummy allowing to call filter on the Optional Predicate<Integer>isAbundant = i -> first_number > second_number; // Check if input is abundant Predicate<Integer> isPerfect = i -> first_number == second_number; // Check if input is perfect Supplier<String> other = () -> dummy.filter(isAbundant).map(i -> "ABUNDANT").orElse("DEFICIENT"); // Fallback, if input is not perfect. Check for abundant or return default Supplier<String> validate = () -> dummy.filter(isPerfect).map(i -> "PERFECT").orElse(other.get()); // Check if input is perfect or use fallback return validate.get(); 作为依赖项。只是pom。

答案 1 :(得分:0)

当我从命令行运行gradlew test时,我发现了如何配置Android应用程序以将Cucumber测试作为“本地单元测试”运行。这是基于我的SO question here的,并且我在这里写了一篇有关它的“ HOWTO”博客文章:Android: Run Cucumber tests without a device or an emulator

完成任务的关键在应用程序的build.gradle文件中。通过锁定unitTests.all部分中的testOptions钩子,我可以使用javaexec来运行Cucumber,如下所示:

android {
    ...
    testOptions {
        unitTests.all {
            def classpath2 = getClasspath()
            javaexec {
                main = "cucumber.api.cli.Main"
                classpath = classpath2
                args = ['--plugin', 'pretty', '--glue', 'gradle.cucumber', 'src/test/java/cucumber/assets']
            }
        }
    }
)