Android Instrumentation测试没有从库项目中找到类

时间:2015-01-30 14:10:10

标签: android android-testing

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

所以这是我的测试:

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

这是什么交易?我已经将我的库定义为build.gradle中的“编译” - 依赖,并且编译得很好。该库也可以从主应用程序类中调用而不会出现问题。只有当我从测试中调用它时才会失败。我的应用程序和我的测试都在同一模块中。

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

项目结构:

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

运行Android Studio v1.0.2 Gradle构建工具v1.0.0 使用默认的Instrumentation测试运行器从AS的Run / Debug配置作为“MyApp”模块运行“Android Test”。

2 个答案:

答案 0 :(得分:8)

好的,这个有点棘手。关键字: proguard minify 。由于仪器测试使用了迄今为止的新实现方法,因此proguard没有了解其使用情况,因此在proguardDebugTest构建步骤中将其从DEX中删除。

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

答案 1 :(得分:1)

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

有用的链接:

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

Specifying test dependencies with the Gradle Android build system

希望这有帮助