我的所有项目活动都继承自一个CustomActivity,它是我创建的一个外部库,用于帮助我处理常见的用法。Robolectric NoClassDefFoundError与外部库
问题是,当我尝试测试与robolectric该活动我得到这个错误:
java.lang.NoClassDefFoundError: br/com/androidcore/activity/CustomActivity
任何想法?我应该影子吗?我应该参考一些Robolectric配置吗?
这里是我的应用程序生成的文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "br.com.boozeprice"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
defaultConfig {
testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:support-v4:21.0.3'
compile project(':androidcore')
compile project(':persistencecore')
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:2.4'
}
编辑,添加额外的信息:
我gradle这个版本:
dependencies {
classpath 'com.android.tools.build:gradle:1.1.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
我的测试:
@RunWith(CustomRobolectricRunner.class)
public class IntegrationTest {
@Test
public void testActivity() {
Activity activity = Robolectric.setupActivity(MainActivity.class);
TextView txt = (TextView) activity.findViewById(R.id.txtMain);
String result = txt.getText().toString();
assertThat(result, equalTo("Test"));
}
}
我CustomRunner:
public class CustomRobolectricRunner extends RobolectricTestRunner {
public CustomRobolectricRunner(Class<?> testClass)
throws InitializationError {
super(testClass);
}
@Override
protected AndroidManifest getAppManifest(Config config) {
String path = "src/main/AndroidManifest.xml";
// android studio has a different execution root for tests than pure gradle
// so we avoid here manual effort to get them running inside android studio
if (!new File(path).exists()) {
path = "app/" + path;
}
config = overwriteConfig(config, "manifest", path);
return super.getAppManifest(config);
}
protected Config.Implementation overwriteConfig(
Config config, String key, String value) {
Properties properties = new Properties();
properties.setProperty(key, value);
return new Config.Implementation(config,
Config.Implementation.fromProperties(properties));
}
@Override
protected SdkConfig pickSdkVersion(
AndroidManifest appManifest, Config config) {
// current Robolectric supports not the latest android SDK version
// so we must downgrade to simulate the latest supported version.
config = overwriteConfig(config, "emulateSdk", "18");
return super.pickSdkVersion(appManifest, config);
}
}
我的主要活动:
public class MainActivity extends CustomActivity
自定义活动:
public abstract class CustomActivity extends Activity
在此先感谢
什么安卓gradle这个插件版本您使用? – 2015-04-03 07:30:13
你能分享你的测试课吗? – 2015-04-03 07:30:44
刚刚添加了额外的信息,谢谢。 – Gilson 2015-04-03 15:20:56