【问题标题】:Robolectric doesn't work with UrbanAirshipRobolectric 不适用于 UrbanAirship
【发布时间】:2014-05-22 14:56:37
【问题描述】:

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

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

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

得到

test1 失败 java.lang.RuntimeException
引起:java.lang.IllegalStateException

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

java.lang.IllegalStateException:无法解析 UrbanAirshipProvider。请检查您的 AndroidManifest.xml 中是否定义了提供程序,并且权限字符串是否设置为“YOUR_PACKAGENAME.urbanairship.provider”

我检查了我的清单,但似乎没有任何问题。

 <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。 有没有什么办法解决这一问题 ?

【问题讨论】:

  • 您好,您解决了这个问题吗?我很难让这两者一起工作:(

标签: android android-studio robolectric urbanairship.com


【解决方案1】:

问题是 Robolectric 没有实现 Urban Airship 使用的方法来确定提供程序是否在清单中正确。这仅在飞艇配置选项中禁用“inProduction”时才检查。您可能可以通过将其设置为 true 来进行测试。

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

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

【讨论】:

    【解决方案2】:

    您可以尝试在 Config 中设置清单,看看是否有帮助:

    @Config(emulateSdk = 18, manifest = "/path/to/your/AndroidManifest.xml")
    @RunWith(RobolectricTestRunner.class)
    public class MyActivityTest {
    ...
    }
    

    【讨论】:

      【解决方案3】:

      您可以将 Urban Airship TakeOff 代码包装在应用程序类的 try catch 中。这样它就不会在未找到时导致测试用例崩溃。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-15
        相关资源
        最近更新 更多