gpt4 book ai didi

由于参数不明确异常,Android 仪器测试未运行

转载 作者:搜寻专家 更新时间:2023-11-01 08:19:04 25 4
gpt4 key购买 nike

在两种情况下,我无法在我的 Android 项目中运行仪器测试:

  1. 运行单个测试时(即单个@Test)
  2. 在一个类中运行所有测试时

能够通过右键单击测试所在的文件夹并选择Run 'Tests in PACKAGE_NAME' 选项来运行仪器测试

这是运行单个测试的示例:

Testing started at 6:35 PM ...

12/30 18:35:05: Launching getId()
$ adb push /Users/zach/Developer/Code/testapp/app/build/outputs/apk/develop/debug/app-develop-debug.apk /data/local/tmp/com.zao.testapp.develop
$ adb shell pm install -t -r "/data/local/tmp/com.zao.testapp.develop"
Success
APK installed in 4 s 42 ms
No apk changes detected since last installation, skipping installation of /Users/zach/Developer/Code/testapp/app/build/outputs/apk/androidTest/develop/debug/app-develop-debug-androidTest.apk
Running tests

$ adb shell am instrument -w -r -e debug false -e class 'com.zao.testapp.models.entities.impl.EntityParseTest#getId' com.zao.testapp.develop.test/com.zao.testapp.TestRunner
Client not ready yet..
Started running tests
Test running failed: Fatal exception when running tests
java.lang.IllegalArgumentException: Ambiguous arguments: cannot provide both test package and test class(es) to run
at android.support.test.internal.runner.TestRequestBuilder.validate(TestRequestBuilder.java:773)
at android.support.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:742)
at android.support.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:354)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:260)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2075)
Empty test suite.

当我通过右键单击选项运行以运行包中的所有测试时,这是我所看到的:

Testing started at 6:40 PM ...

12/30 18:40:38: Launching Tests in 'com.zao.testapp.models.entities.impl'
$ adb push /Users/zach/Developer/Code/testapp/app/build/outputs/apk/develop/debug/app-develop-debug.apk /data/local/tmp/com.zao.testapp.develop
$ adb shell pm install -t -r "/data/local/tmp/com.zao.testapp.develop"
Success
APK installed in 4 s 471 ms
No apk changes detected since last installation, skipping installation of /Users/zach/Developer/Code/testapp/app/build/outputs/apk/androidTest/develop/debug/app-develop-debug-androidTest.apk
Running tests

$ adb shell am instrument -w -r -e package com.zao.testapp.models.entities.impl -e debug false com.zao.testapp.develop.test/com.zao.testapp.TestRunner
Client not ready yet..
Started running tests
Tests ran to completion.

这里唯一的“陷阱”可能是我使用的是自定义测试运行程序(上面引用的 TestRunner.java)。我不确定这是否重要。我会尝试删除它(一些测试需要自定义运行器,但我现在可以禁用它们...)

有什么想法吗?谢谢!

最佳答案

我调试了这个问题并找出了根本原因。我正在使用一个自定义的运行器,它忽略了一个正在测试的包。我实现了 https://github.com/mockito/mockito/issues/922 中描述的解决方法让我的 mockito 东西与自定义运行器一起工作,这导致了错误。

arguments.putString("notPackage", "net.bytebuddy"); 放在运行器的 onCreate 中会导致 TestRequestBuilder.java 在验证方法中抛出异常,它会执行以下操作:

if ((!mIncludedPackages.isEmpty() || !mExcludedPackages.isEmpty()) && !classNames.isEmpty()) {
throw new IllegalArgumentException(AMBIGUOUS_ARGUMENTS_MSG);
}

其中 mExcludedPackages 的大小为 1 (net.bytebuddy),而 classNames 也不为空并且包含我正在运行的类测试。

因此,要解决此问题,您可以执行以下两项操作之一:

  1. 删除 arguments.putString("notPackage", "net.bytebuddy") 解决方法(这使得 mockito 在某些情况下无法用于我的测试)。
  2. 重构您的测试以不需要自定义运行器,从而也执行第 1 步。
  3. 无法运行特定测试/文件的测试。

我最终完成了第 2 步,FWIW。

关于由于参数不明确异常,Android 仪器测试未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com