Android 仪器测试未从库项目中找到 类

Android Instrumentation test does not find classes from library project

所以当 运行 我的 Activity/instrumentation 测试来自 Android Studio 时,我在尝试调用库中的方法的代码行上得到 NoSuchMethodError来自单元测试的模块。

所以这是我的测试:

public class MainActivityTest extends ActivityInstrumentationTestCase2 {
    public void testMainActivity() {
        final MainActivity target = (MainActivity) getActivity();
        MyLibarary.someStaticMethod(); // yields java.lang.NoSuchMethodError
}

这是怎么回事?我已将我的库定义为 build.gradle 中的 "compile" 依赖项,并且编译正常。该库也可以从主应用程序 类 中毫无问题地调用。只有当我从测试中调用它时它才会失败。我的应用程序和我的测试在同一个模块中。

我已经尝试 运行 clean 任务,手动执行 assembleDebug 和 assembleDebugTest 任务。没有用。

项目结构:

Root
 |---MyApp 
 |     |---src/main/...
 |     |---src/androidTest/...
 |----MyLibrary

运行 Android Studio v1.0.2 Gradle 构建工具 v1.0.0 运行 作为模块 "MyApp" 上的 "Android Test" 来自具有默认 Instrumentation 测试运行器的 AS Run/Debug 配置。

Gradle 不是最新的。但我认为如果尝试编写仪器测试,我们应该在 build.gradle 中指定 testCompileandroidTestCompile 依赖项。

有用的链接:

http://gradle.org/docs/current/userguide/java_plugin.html

Specifying test dependencies with the Gradle Android build system

希望对您有所帮助

好吧,这个有点棘手。关键字:proguard minify。由于到目前为止新实现的方法 被仪器测试使用,proguard 没有使用它,因此在 proguardDebugTest 构建步骤中将其从 DEX 中删除。

解决方案:要么在调试版本中禁用缩小(gradle:android.buildTypes.debug.minifyEnabled false),要么在主应用程序中使用该方法。