繁体   English   中英

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

[英]How to make Cucumber features run in an Android project as local unit tests?

我有一个用 Java 编写的 Android 项目,我正在 Android Studio 中处理它。

我想使用 Cucumber 对一些内部组件进行集成测试(注意:我知道这不是 BDD 方式,但对我有用)。 我希望使用gradlew test将测试作为本地单元测试(不带 Instrumentation)运行,因为被测组件不与 Android SDK 交互。

我的问题是 Gradle 无法识别 Cucumber 功能,并且在运行gradlew test时无法运行。

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

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

     testImplementation 'io.cucumber:cucumber-java:3.0.2' testImplementation 'io.cucumber:cucumber-junit:3.0.2' testImplementation 'io.cucumber:cucumber-jvm:3.0.2'
  2. 在那里,我添加了放置功能文件的路径:

     android { ... sourceSets { test { assets.srcDirs = ['src/test/java/integrationTest/assets'] } } }

    这是基于此文件夹结构:

    在此处输入图片说明

  3. Steps1.java ,为步骤 ( Steps1.java ) 添加了一个类。

我在这里缺少什么?

您的功能文件可能没有被收录,因为您没有包含跑步者。 您可以创建JUnit Runner或使用Gradle 黄瓜插件 我不确定两者是否适用于 Android。

此外,您不需要io.cucumber:cucumber-jvm:3.0.2作为依赖项。 它只是一个pom。

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

完成它的关键是在应用程序的build.gradle文件中。 通过锁定testOptions部分中的unitTests.all钩子,我可以像这样使用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']
            }
        }
    }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM