我有一个用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功能。
到目前为止,这是我设置的方式:
将这些依赖项添加到我的应用程序的build.gradle中:
android {
...
sourceSets {
test {
assets.srcDirs = ['src/test/java/integrationTest/assets']
}
}
}
此外,我还在其中添加了放置功能文件的路径:
Steps1.java
这基于以下文件夹结构:
为步骤(splice
)添加了一个类,如上所示。
我在这里想念什么?
答案 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']
}
}
}
)