gpt4 book ai didi

android - 你如何转换 RuntimeEnvironment.application?

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:42 25 4
gpt4 key购买 nike

运行 Robolectric 测试时,RuntimeEnvironment.application 的类型由您的配置决定。假设我将 RoboApplication.class 配置为我的测试应用程序,我可以将 RuntimeEnvironment.application 强制转换为我的类型。

RoboApplication app = (RoboApplication) RuntimeEnvironment.application;
app.doSomething();

但是,一旦我集成了 PowerMock,转换行就会失败

java.lang.ClassCastException: RoboApplication cannot be cast to RoboApplication

我该如何解决这个问题?

最佳答案

这是一个问题,因为 PowerMock 和 Robolectric 由于使用它们自己的类加载器而相互不兼容

尽管名称相同,但 Class 对象实际上并不相同:Robolectric 和 PowerMock 都通过自定义类加载器加载测试来工作。这些类加载器会更改相关类,允许您替换静态/最终 Android 系统类和方法 [Robolectric] 或所有静态/最终类 [PowerMock]。这是 PowerMock 和 Robolectric 都依赖于拥有自己的 JUnit4 Runner 的部分原因:这样他们就可以从自己的修改类加载器加载适当的类。

正因为如此,实例无法转换为彼此的类,即使它们具有相同的名称并且源自相同的源文件:每个框架都可以更改类实现,因此它们不一定彼此兼容。

您需要选择一个框架或另一个框架:使用 Robolectric shadows ,可能直接使用 EasyMock 或 Mockito,或者使用 PowerMock 手动 stub Android 基础设施调用。

另见:

关于android - 你如何转换 RuntimeEnvironment.application?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34278590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com