gpt4 book ai didi

android - Robolectric 不适用于 UrbanAirship

转载 作者:行者123 更新时间:2023-11-29 01:42:12 25 4
gpt4 key购买 nike

我正在使用 UrbanAirship 接收推送,我可以成功接收通知。我决定使用 robolectric 向我的项目添加测试,并创建了一个简单的测试,如下所示。

@Config(emulateSdk = 18)
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {

@Test
public void test1(){
assertTrue(true);
}
}

得到

test1 FAILED java.lang.RuntimeException
Caused by: java.lang.IllegalStateException

当我使用调试运行测试时,我注意到了一个奇怪的错误。

java.lang.IllegalStateException: Unable to resolve UrbanAirshipProvider. Please check that the provider is defined in your AndroidManifest.xml, and that the authority string is set to "YOUR_PACKAGENAME.urbanairship.provider"

我检查了我的 list ,但看起来没有任何问题。

 <provider android:name="com.urbanairship.UrbanAirshipProvider"
android:authorities="com.test.myapp.app.urbanairship.provider"
android:permission="com.test.myapp.app.permission.UA_DATA"
android:exported="true"
android:multiprocess="true" />

如果我注释掉与 urbanairship 相关的行,我可以毫无错误地运行我的测试。我正在使用 AndroidStudio,urbanairship jar 的版本是 4.0.2。有没有什么办法解决这一问题 ?

最佳答案

问题是 Robolectric 没有实现 Urban Airship 用来确定供应商是否在 list 中的方法。这仅在飞艇配置选项中禁用“inProduction”时才会选中。您可以将其设置为 true 以进行测试。

您可以提供一个测试应用程序类,用于代替您实现起飞的应用程序。然后您可以不调用起飞或尝试进行上述“生产中”更改。这是我很快找到的链接 http://robolectric.blogspot.com/2013/04/the-test-lifecycle-in-20.html .希望它仍然有意义。

如果您决定不调用起飞,那么在测试调用 Urban Airship 库的代码时可能会遇到 NPE。一个快速的解决方案是将模拟版本的 UAirship 及其组件注入(inject)到您要测试的类中。一些静态调用可能也需要起飞,并且需要有一个能够被模拟或 stub 的包装器。这不是问题的最优雅的解决方案,但它应该允许您开始测试。我们一定会研究解决方案,以便将来更轻松地进行测试。

关于android - Robolectric 不适用于 UrbanAirship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23810390/

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