[英]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
时无法运行。
到目前为止,我是这样设置的:
将这些依赖项添加到我的应用程序的 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'
在那里,我添加了放置功能文件的路径:
android { ... sourceSets { test { assets.srcDirs = ['src/test/java/integrationTest/assets'] } } }
这是基于此文件夹结构:
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.