RobolectricTestRunner如何创建Robolectric.application?

时间:2014-05-09 13:53:21

标签: android robolectric junit-runner

我需要从Robolectric项目中自定义RobolectricTestRunner,但我发现了一个我不理解的奇怪行为:

RobolectricTestRunner 包含调用的methodBlock setUpApplicationState(bootstrappedMethod, parallelUniverseInterface, strictI18n, systemResourceLoader, appManifest, config); 该方法执行ParallelUniverse类的setUpApplicationState

在第146行,setupApplicationState执行application.onCreate(); 当我调试应用程序时,当我检查第146行的Robolectric.application值时,我看到它已成功创建,但如果我在RobolectricTestRunner类中检查相同的值,则在行:220之后,Robolectric.application为空... 为什么?这是一个静态值..我无法理解!

2 个答案:

答案 0 :(得分:1)

我找到了问题的答案: parallelUniverse是通过调用使用不同classLoader的sdkEnvironment.getRobolectricClassLoader()创建的:AsmInstrumentingClassLoaderRobolectricTestRunner是不同classLoader的一部分,因此我无法访问同一个对象

答案 1 :(得分:0)

我发布这个,如果这可能对你有所帮助 How can we access context of an application in Robolectric?

并且还考虑@EugenMartynov有100多个upvotes的答案

Just use for version 1.x and 2.x:

Robolectric.application;

And for version 3.x:

RuntimeEnvironment.application;

希望这可以帮助你......