所以当我从 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 的运行/调试配置在模块“MyApp”上作为“Android 测试”运行。
最佳答案
好吧,这个有点棘手。关键字:proguard 缩小。由于到目前为止新实现的方法仅被仪器测试使用,proguard 没有使用它,因此在 proguardDebugTest 构建步骤中将其从 DEX 中删除。
解决方案:要么在调试构建中禁用缩小(在 gradle 中:android.buildTypes.debug.minifyEnabled false
),要么在主应用程序中使用该方法。
关于Android Instrumentation 测试没有从库项目中找到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28237696/