我有一个简单的测试实现,我可以在Android Studio上运行。 这个类在我的项目的/ src / androidTest目录里面。的 ApplicationTest.java:
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
@Override
protected void setUp() throws Exception {
createApplication();
}
@SmallTest
public void testSample() {
assertEquals("Pass: ", 50, 50);
assertEquals("Fail: ", 50, 49);
}
}
但是当我尝试使用以下命令通过gradle运行时,没有任何运行。我尝试的Gradle命令:
./gradlew test
输出:
c-08e-abaek-0:HelloTest abaek$ ./gradlew test
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preCompileDebugUnitTestJava
:app:preDebugUnitTestBuild UP-TO-DATE
:app:prepareDebugUnitTestDependencies
:app:processDebugUnitTestJavaRes UP-TO-DATE
:app:compileDebugUnitTestJava UP-TO-DATE
:app:compileDebugUnitTestSources UP-TO-DATE
:app:mockableAndroidJar UP-TO-DATE
:app:assembleDebugUnitTest UP-TO-DATE
:app:testDebug UP-TO-DATE
:app:preReleaseBuild UP-TO-DATE
:app:checkReleaseManifest
:app:prepareReleaseDependencies
:app:compileReleaseAidl UP-TO-DATE
:app:compileReleaseRenderscript UP-TO-DATE
:app:generateReleaseBuildConfig UP-TO-DATE
:app:generateReleaseAssets UP-TO-DATE
:app:mergeReleaseAssets UP-TO-DATE
:app:generateReleaseResValues UP-TO-DATE
:app:generateReleaseResources UP-TO-DATE
:app:mergeReleaseResources UP-TO-DATE
:app:processReleaseManifest UP-TO-DATE
:app:processReleaseResources UP-TO-DATE
:app:generateReleaseSources UP-TO-DATE
:app:processReleaseJavaRes UP-TO-DATE
:app:compileReleaseJava UP-TO-DATE
:app:preCompileReleaseUnitTestJava
:app:preReleaseUnitTestBuild UP-TO-DATE
:app:prepareReleaseUnitTestDependencies
:app:processReleaseUnitTestJavaRes UP-TO-DATE
:app:compileReleaseUnitTestJava UP-TO-DATE
:app:compileReleaseUnitTestSources UP-TO-DATE
:app:assembleReleaseUnitTest UP-TO-DATE
:app:testRelease UP-TO-DATE
:app:test UP-TO-DATE
BUILD SUCCESSFUL
Total time: 3.303 secs
This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html
我做错了什么?
答案 0 :(得分:11)
我不熟悉各种Android测试,但我发现你正在尝试进行基本的单元测试。
命令:
./gradlew test
将执行位于src/test/java/
目录中的纯Java单元测试。
纯Java测试Android上的单元测试
如果你想在没有android依赖项的情况下执行纯java 单元测试,你可以在src/test/java
目录中找到它们并按如下方式定义它们:
@RunWith(JUnit4.class)
public class SampleTest {
@Test
public void testKiraiShouldSetAnInputAndNotBeNull() {
// given
int givenValue = 50;
// when
int expectedValue = 50; // you can generate this value by your app
// then
assertThat(givenValue).isEqualTo(expectedValue);
}
}
此外,您应该在build.gradle
文件中包含以下依赖项:
dependencies {
testCompile 'junit:junit:4.12'
testCompile('com.google.truth:truth:0.25') {
exclude group: 'junit' // Android has JUnit built in
}
}
我使用Google Truth进行断言。这是非常方便的图书馆。 之后,您可以执行命令:
./gradlew test
并且应该执行您的测试。此外,您也可以通过Android Studio执行它们。
如果您想查看纯Java测试的完整工作示例,可以在此处查看我的一个项目:https://github.com/pwittchen/kirai。
使用Android依赖项进行单元测试
如果您想使用Android依赖项创建单元测试(例如,使用Android SDK中的几个类),您应该将它们放在以下目录中:
src/androidTest/
示例性测试可以看起来如下:
@RunWith(AndroidJUnit4.class)
public final class SampleTest {
@Test
public void testKiraiShouldSetAnInputAndNotBeNull() {
// given
int givenValue = 50;
// when
int expectedValue = 50; // you can generate this value by your app
// then
assertThat(givenValue).isEqualTo(expectedValue);
}
}
基本上,与前一个示例的唯一区别是定义测试运行器的@RunWith
注释的值以及您可以在此处使用Android SDK中的类的事实。
您应该在build.gradle
文件中定义以下依赖项:
dependencies {
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile('com.google.truth:truth:0.26') {
exclude group: 'junit' // Android has JUnit built in.
}
}
此外,您应该在testInstrumentationRunner
文件中定义build.gradle
以及:
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
之后,您需要运行Android设备模拟器或将真正的Android设备连接到您的计算机并启用调试。
然后,您可以执行以下命令:
./gradlew connectedCheck
它将在设备或仿真器上执行检测单元测试。您也可以从Android Studio执行这些测试。
如果您想查看包含Android依赖项的单元测试的完整工作示例,您可以查看我的其他项目,我使用此方法:https://github.com/pwittchen/prefser。
Android上的自动测试可能在开始时令人困惑,我知道你的痛苦。我希望我的帖子会有所帮助。 :)
答案 1 :(得分:0)
要运行Local unit test
-位于module-name/src/test/java/
的
./gradlew test
要运行Instrumented unit test
-位于module-name/src/androidTest/java
的
./gradlew connectedAndroidTest
了解更多here