我正在尝试为 Android 编写一个单元测试,但是在我的一个测试方法中执行以下非常简单的代码时出现“NoClassdefFound”错误:
public void testAAA(){
testAPI1 test = new testAPI1();
test.makeApiCall1();
}
类 testAPI1 看起来像这样:
public class testAPI1 implements SomeInterface{
public void makeApiCall1(){
//do something
}
}
SomeInterface 只是一些接口。 然而,当我删除“SomeInterface”时,一切正常。
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mamlambo.article.simplecalc.test" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<uses-library android:name="android.test.runner" />
</application>
<uses-sdk android:minSdkVersion="7" />
<instrumentation android:targetPackage="com.mamlambo.article.simplecalc"
android:name="android.test.InstrumentationTestRunner"
android:label="Simple Calc Test"/>
</manifest>
到底是什么问题?
问题是没有找到我实现的接口。该接口位于我引用的另一个项目中,该项目显然没有正确引用。 我所做的就是将该项目导出到一个 jar 文件中(没有 AndroidManifest!),然后将其导入到我的测试项目中,从那时起一切工作正常。
我解决了这个问题;它与 Android Studio 最新版本有关。所有测试用例都不起作用,解决方案是使用正确的值更新
/.idea/runConfigurations.xml
。
我找到了解决方案这里
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>