2013-05-18 57 views
3

与Robolectric的v2.0和基于gradle的项目我正面临赛跑者缺少RobolectricContext的问题。它的工作原理与 testCompile组: 'org.robolectric',名称: 'robolectric',版本: '2.0-α-2'RobolectricContext缺少基于Gradle的项目

和失败 testCompile组: 'org.robolectric',名称: 'robolectric'版本:“2.0”

我有我的问题是在我的gradle这个build文件的感觉,但我发现没有办法解决它尚未:

apply plugin : 'java-robolectric' 
apply plugin : 'idea' 

// get 'java-robolectric' from Maven Central 
buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    // use version 2.0 for Robolectric 2.0 
    classpath group: 'com.stanfy.android', name: 'gradle-plugin-java-robolectric', version: '2.0' 
    } 
} 
sourceSets { 
    main { 
     java { 
      srcDir 'src/java' 
     } 
    } 
} 

version = '0.9' 

javarob { 
    packageName = 'org.ligi.androidhelper' 
} 

test { 
    scanForTestClasses = false 
    include "**/*Test.class" 
} 

repositories { 
    mavenCentral() 
} 

test { 
    afterTest { desc, result -> 
     println "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}" 
    } 
} 

dependencies { 
    compile fileTree(dir : 'libs', include : '*.jar') 

    testCompile group: 'junit', name: 'junit', version: '4.10' 
    testCompile group: 'org.mockito', name: 'mockito-core', version: '1.8.0' 

    compile group: 'com.google.android', name: 'android', version: '4.1.1.4' 
    testCompile group: 'org.robolectric', name: 'robolectric', version: '2.0' 
} 

是错误,我得到:

[email protected]:~/git/AndroidHelper$ gradle test 
:compileJava UP-TO-DATE 
:processResources UP-TO-DATE 
:classes UP-TO-DATE 
:compileTestJava UP-TO-DATE 
:processTestResources UP-TO-DATE 
:testClasses UP-TO-DATE 
:test 
Executing test classMethod [org.ligi.androidhelper.test.CheckBoxHelperTest] with result: FAILURE 

org.ligi.androidhelper.test.CheckBoxHelperTest > classMethod FAILED 
    java.lang.RuntimeException 
     Caused by: java.lang.RuntimeException 
Executing test classMethod [org.ligi.androidhelper.test.BitmapHelperTest] with result: FAILURE 

org.ligi.androidhelper.test.BitmapHelperTest > classMethod FAILED 
    java.lang.RuntimeException 
     Caused by: java.lang.RuntimeException 

2 tests completed, 2 failed 
:test FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':test'. 
> There were failing tests. See the report at: file:///home/ligi/git/AndroidHelper/build/reports/tests/index.html 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

Total time: 11.723 secs 

完整的数据来源在这里: https://github.com/ligi/AndroidHelper

+0

RobolectricContext不再可用于Robolectric 2.0的源代码中。我目前正在寻找一种迁移的好方法。 – keyboardsurfer

回答

0

一种解决方法是不去除Runner.java - 因为它总是得到由robolectric插件的gradle与故障代码(使用的自动生成RobolectricContex)然后。诀窍是修改此文件 - 即使您实际上不打算使用它 - 我的看起来像这样:

import java.io.File; 
import org.junit.runners.model.InitializationError; 
import org.robolectric.AndroidManifest; 
import org.robolectric.RobolectricTestRunner; 

/**              
* Use this runner instead of RobolectricTestRunner with @RunWith annotation. 
*/ 
public class Runner extends RobolectricTestRunner { 

    public Runner(final Class<?> testClass) throws InitializationError { 
     super(testClass); 
    } 

} 
2

该类别RobolectricContext不再需要。此外,它在Robolectric 2.0中不存在。您可以简单地覆盖RobolectricTestRunner中的方法。

例如,找到AndroidManifest.xml可以通过以下方式实现:

@Override 
protected AndroidManifest createAppManifest(FsFile manifestFile) { 
    if (!manifestFile.exists()) { 
    manifestFile = Fs.fileFromPath("pathToMy/AndroidManifest.xml"); 
    } 
    return super.createAppManifest(manifestFile); 
} 
+1

或者,更容易使用@Config(manifest =“MyFile.xml”)注释,或者创建一个名为“org.robolectric.Config.properties”的文件。应该几乎不需要再扩展RobolectricTestRunner。 – Xian

+0

感谢您的答案,但我不想使用自定义亚军 - 实际上我使用默认的一个: import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) 但无论如何,Runner.java都会生成失败的代码。 – ligi