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

Android Instrumentation测试未从库项目中找到类,android,android-testing,Android,Android Testing,因此,当从Android Studio运行我的活动/检测测试时,在试图从单元测试调用库模块中的方法的代码行上,我得到了一个NoSuchMethodError 这是我的测试: public class MainActivityTest extends ActivityInstrumentationTestCase2 { public void testMainActivity() { final MainActivity target = (MainActivity) ge

因此,当从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
作为“Android测试”在模块“MyApp”上运行,从as的运行/调试配置中选择默认的Instrumentation Test runner。

不是最新的
Gradle
。但是我认为如果试图编写插装测试,我们应该在
build.gradle
中指定
testCompile
androidTestCompile
依赖项

有用链接:


希望这有帮助

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


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

在Eclipse>>项目属性>>Android>>中,确保您正在测试的项目在库下引用“是库”可以不勾选。这两个都不是真的命名的——我为此匿名了代码。但这不是问题所在——如果我有语法错误,代码就不会编译。它可以编译,但运行时失败。对不起,我在您回复时编辑了我的评论。关于这个主题的大多数帖子都说你发现了这个库的两个版本,一个在编译时,另一个在运行时。我可能应该停止评论了。我刚才看到您正在使用Studio,而不是eclipse。啊!哈哈,非常感谢您的尝试:)只有测试独有的依赖项,比如junit,才应该以这种方式指定。我的主应用程序已经通过“编译”依赖于库,因此无需再次引用它。解决方案与proguard有关——请看我的另一个答案,这很有趣。未发布导致问题的方法与instrumentationTestCase无关。不过接得好!