I have an Android project which uses:
Testing without involving any Activity (e.g. just asserting 1 == 1), works fine. But, when I use activity creates the following error:
java.lang.RuntimeException: huh? can't find parent for StyleData{name='Theme_Sanactbar', parent='@style/Theme_AppCompat_Light_DarkActionBar'}
at org.robolectric.shadows.ShadowAssetManager$StyleResolver.getParent(ShadowAssetManager.java:365)
at org.robolectric.shadows.ShadowAssetManager$StyleResolver.getAttrValue(ShadowAssetManager.java:350)
I tried https://github.com/robolectric/robolectric/issues/979 but it creates the same result.
FYI:
This is my PROJECT/build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenCentral()
// For Robolectric
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
maven { url 'https://github.com/rockerhieu/mvn-repo/raw/master/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.11.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.2+'
classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.1-SNAPSHOT'
}
}
allprojects {
repositories {
mavenCentral()
// For Robolectric
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}
}
And this is my PROJECT/app/build.gradle
apply plugin: 'android'
apply plugin: 'android-apt'
apply plugin: 'android-test' // Robolectric
repositories {
mavenLocal()
}
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
defaultConfig {
applicationId "id.web.michsan.helloworld"
minSdkVersion 8
targetSdkVersion 19
versionCode 6
versionName "1.1.1"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
if (System.getenv("KEYSTORE") != null) {
signingConfigs {
release {
storeFile file(System.getenv("KEYSTORE"))
storePassword System.getenv("KEYSTORE_PASSWORD")
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASSWORD")
}
}
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
if (System.getenv("KEYSTORE") != null) {
signingConfig signingConfigs.release
}
}
}
/* For the sake of butterknife */
lintOptions {
disable 'InvalidPackage'
}
sourceSets {
androidTest.setRoot('src/test') // For Robolectric
}
}
ext {
androidApiVersion = '19.1.0'
butterknifeVersion = '4.0.1'
robotiumVersion = '5.0.1'
}
dependencies {
compile 'com.android.support:appcompat-v7:' + androidApiVersion
compile 'com.android.support:support-v4:' + androidApiVersion
compile fileTree(dir: 'libs', include: ['*.jar'])
compile(project(':core')) {
exclude group: 'org.apache.httpcomponents'
exclude group: 'org.json'
}
compile fileTree(dir: '../core/libs', include: ['*.jar'])
apt 'com.jakewharton:butterknife:' + butterknifeVersion
compile 'com.jakewharton:butterknife:' + butterknifeVersion
androidTestCompile 'com.jayway.android.robotium:robotium-solo:' + robotiumVersion
// For Robolectric
androidTestCompile 'junit:junit:4.11'
androidTestCompile 'org.robolectric:robolectric:2.3'
compile 'com.mopub.mobileads:mopub-android:+@aar'
}
// Robolectric: Add this definition in order to only include files that are suffixed with Test.class and set the max heap size
androidTest {
include '**/*Test.class'
maxHeapSize = "2048m"
}
After debugging the Robolectric source, I know that I need to create project.properties file.
Assuming you're using Android Studio project structure, location of the file is PROJECT_X/app/src/main/project.properties
The content is
android.library.reference.1=/../../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/19.1.0
This is because Robolectric's AndroidManifest.getBaseDir()
gives you /path/into/AndroidStudioProjects/PROJECT_X/app/src/main
.
So, this base directory is appended with the reference location. On this case, I can ensure that /path/into/AndroidStudioProjects/PROJECT_X/app/src/main
+ /../../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/19.1.0
gives me a directory which contains AndroidManifest.xml of the appcompat library.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With