目前我有一个test/src/java
文件夹,其中存储了Android应用程序的所有测试(测试是使用junit,mockito和robolectric完成的)。
我可以使用./gradlew test
我想要实现的是拥有两个文件夹:
integrationTest/src/java
- 用于集成测试test/src/java
- 用于单元测试我还想单独运行它们,例如./gradlew test
和./gradlew integrationTest
。
我设法使用sourceSets
分割目录,如下所示:
sourceSets {
test {
java {
srcDirs = ['src/test/java', 'src/integrationTest/java', 'src/commonTest/java']
}
resources {
srcDirs = ['src/test/resources', 'src/integrationTest/resources', 'src/commonTest/resources']
}
}
}
我在Google上搜索了许多关于如何创建自定义测试任务的示例,但其中大多数与java而不是android有关,而其他的已经过时了。我现在花了整整一天,所以如果有人可以帮助我,我会非常感激。
答案 0 :(得分:3)
如果您的集成测试是检测测试,那么您可以使用默认文件夹test
和androidTest
并使用./gradlew test
和./gradlew connectedAndroidTest
另一种方法(如果你可以在test
文件夹中进行集成测试)将在test
文件夹中使用单独的包,并使用以下命令单独运行测试:
./gradlew testDebug --tests="com.yourapplication.unittests.*"
./gradlew testDebug --tests="com.yourapplication.integrationtests.*"
...
答案 1 :(得分:2)
几天前我遇到了同样的问题。
为了解决它并且能够独立地运行每种类型的测试,我将测试分开:
// run only unit tests
test{
include '**/unit/**'
exclude '**/integration/**'
doLast {
println 'Unit tests execution finished.'
}
}
// run only integration tests
task integrationTest(type: Test){
include '**/integration/**'
exclude '**/unit/**'
doLast {
println 'Integration tests execution finished.'
}
}
// run all tests (unit + integration)
task allTests(type: Test){
include '**/integration/**'
include '**/unit/**'
doLast {
println 'All tests execution finished.'
}
}
include 关键字表示执行命令时要包含的文件。如果您只想运行 单元测试,则只能包含包含单元测试的文件夹,并排除包含集成测试的文件夹。
创建gradle命令时,您可以使用类似的逻辑来运行 集成测试。
要使用此配置和gradle执行测试,请使用:
./gradlew test
执行单元测试 。./gradlew integrationTests
执行集成测试仅。./gradlew allTests
执行两者集成和单元测试。注意:您可以在include / excludes中设置路径,以便在执行测试时包含/排除测试或类。也可以只包含一个测试并排除其他测试,反之亦然。
答案 2 :(得分:0)
可能类似
sourceSets {
integrationTest {
java {
compileClasspath += main.output
runtimeClasspath += main.output
srcDir 'src/integrationTest/java'
}
resources.srcDir 'src/integrationTest/resources'
}
}
configurations {
integrationTestCompile {
extendsFrom compile
}
integrationTestRuntime {
extendsFrom runtime
}
}
task integrationTest(type: Test) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
}
check.dependsOn integrationTest
然后你可以做
dependencies {
integrationTestCompile 'org.seleniumhq.selenium:selenium-java:3.0.1'
integrationTestRuntime 'com.foo:bar:1.0'
}