我需要从Robolectric项目中自定义RobolectricTestRunner,但我发现了一个我不理解的奇怪行为:
RobolectricTestRunner
包含调用的methodBlock
setUpApplicationState(bootstrappedMethod, parallelUniverseInterface, strictI18n, systemResourceLoader, appManifest, config);
该方法执行ParallelUniverse类的setUpApplicationState
。
在第146行,setupApplicationState
执行application.onCreate();
当我调试应用程序时,当我检查第146行的Robolectric.application值时,我看到它已成功创建,但如果我在RobolectricTestRunner类中检查相同的值,则在行:220之后,Robolectric.application为空...
为什么?这是一个静态值..我无法理解!
答案 0 :(得分:1)
我找到了问题的答案:
parallelUniverse是通过调用使用不同classLoader的sdkEnvironment.getRobolectricClassLoader()
创建的:AsmInstrumentingClassLoader
,RobolectricTestRunner
是不同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;
希望这可以帮助你......