所以当我从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”。
答案 0 :(得分:8)
好的,这个有点棘手。关键字: proguard minify 。由于仪器测试使用了迄今为止仅的新实现方法,因此proguard没有了解其使用情况,因此在proguardDebugTest构建步骤中将其从DEX中删除。
解决方案:在调试版本中禁用缩小(使用gradle:android.buildTypes.debug.minifyEnabled false
),或使用主应用程序中的方法。
答案 1 :(得分:1)
Gradle
并不是最新的。但我认为如果尝试编写仪器测试,我们应该在testCompile
中指定androidTestCompile
或build.gradle
依赖项。
有用的链接:
http://gradle.org/docs/current/userguide/java_plugin.html
Specifying test dependencies with the Gradle Android build system
希望这有帮助