Android 机器人分子测量仪';我不能和城市航空公司合作
我正在使用UrbanAirship接收推送,我可以成功接收通知。我决定使用robolectric将测试添加到我的项目中,并创建了一个简单的测试,如下所示Android 机器人分子测量仪';我不能和城市航空公司合作,android,android-studio,robolectric,urbanairship.com,Android,Android Studio,Robolectric,Urbanairship.com,我正在使用UrbanAirship接收推送,我可以成功接收通知。我决定使用robolectric将测试添加到我的项目中,并创建了一个简单的测试,如下所示 @Config(emulateSdk = 18) @RunWith(RobolectricTestRunner.class) public class MyActivityTest { @Test public void test1(){ assertTrue(true); } } 得到 测试
@Config(emulateSdk = 18)
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {
@Test
public void test1(){
assertTrue(true);
}
}
得到
测试1失败
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。
有办法解决这个问题吗 您可以尝试在配置中设置清单,看看这是否有帮助:
@Config(emulateSdk = 18, manifest = "/path/to/your/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {
...
}
问题是Robolectric没有实现城市飞艇用来确定供应商是否正确地在舱单中的方法。只有在飞艇配置选项中禁用“inProduction”时,才会选中此选项。您可以在测试中将其设置为true 您可以提供一个测试应用程序类,该类可以用来代替您实现起飞的应用程序。然后,您可以不调用takeoff,也可以尝试执行上面提到的“inProduction”更改。这是我很快找到的一个链接。希望它仍然相关
如果您决定不调用起飞,那么在测试调用城市飞艇库的代码时,您可能会遇到NPE。一个快速的解决方案是将UAirship的模拟版本及其组件注入到您试图测试的类中。一些静态调用可能也需要起飞,并且需要有一个能够被模拟或存根的包装器。这不是问题的最优雅的解决方案,但它应该允许您开始测试。我们一定会研究解决方案,使测试在未来变得更容易 您可以将城市飞艇起飞代码包装在应用程序类的try-catch中。这样,当未找到它时,它不会导致测试用例崩溃 嗨,你解决这个问题了吗?我很难让这两种方法协同工作:(