android 从命令行测试 --> class 未找到
android test from command line --> class not found
我正在尝试从命令行 运行 我的 android 测试,如下所示:
./gradlew -Pandroid.testInstrumentationRunnerArguments.class=com.my-app.MyAndroidTestClass connectedDebugAndroidTest
当我在终端中执行此操作时,我收到构建失败的消息以及报告中的堆栈跟踪:
java.lang.ClassNotFoundException: com.my-app.MyAndroidTestClass
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:453)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:72)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:104)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:789)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:543)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:386)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2145)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.my-app.MyAndroidTestClass" on path: DexPathList[[zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxxxx.xxxxx.test-yNK7q-kp71fIx71z7ZeJUg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxxxx.xxxxx.test-yNK7q-kp71fIx71z7ZeJUg==/lib/x86, /data/app/com.xxxxx.xxxxx.test-yNK7q-kp71fIx71z7ZeJUg==/base.apk!/lib/x86, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 8 more
奇怪的是我可以从 Android Studio 运行 测试 class。
我错过了什么?
包括测试在内的所有构建目标都被定义为 gradle 构建系统中的任务。
使用命令获取任务列表。
./gradlew tasks
然后运行特定任务使用命令
./gradlew task-name
为了你的测试运行这个命令
./gradlew connectedDebugAndroidTest
当 运行 手动测试时,在 Android Studio 的构建和 运行 window 中,我可以看到 Gradle 任务和 adb shell 执行的命令。
然后我只需要将它们复制到我自己的 bash 脚本中。
我正在尝试从命令行 运行 我的 android 测试,如下所示:
./gradlew -Pandroid.testInstrumentationRunnerArguments.class=com.my-app.MyAndroidTestClass connectedDebugAndroidTest
当我在终端中执行此操作时,我收到构建失败的消息以及报告中的堆栈跟踪:
java.lang.ClassNotFoundException: com.my-app.MyAndroidTestClass
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:453)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:72)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:104)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:789)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:543)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:386)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2145)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.my-app.MyAndroidTestClass" on path: DexPathList[[zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxxxx.xxxxx.test-yNK7q-kp71fIx71z7ZeJUg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxxxx.xxxxx.test-yNK7q-kp71fIx71z7ZeJUg==/lib/x86, /data/app/com.xxxxx.xxxxx.test-yNK7q-kp71fIx71z7ZeJUg==/base.apk!/lib/x86, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 8 more
奇怪的是我可以从 Android Studio 运行 测试 class。
我错过了什么?
包括测试在内的所有构建目标都被定义为 gradle 构建系统中的任务。 使用命令获取任务列表。
./gradlew tasks
然后运行特定任务使用命令
./gradlew task-name
为了你的测试运行这个命令
./gradlew connectedDebugAndroidTest
当 运行 手动测试时,在 Android Studio 的构建和 运行 window 中,我可以看到 Gradle 任务和 adb shell 执行的命令。
然后我只需要将它们复制到我自己的 bash 脚本中。