如何解决使用 AdvertisingIdClient.getAdvertisingIdInfo 进行单元测试得到“IllegalStateException:从主线程调用它会导致死锁”
使用 ShadowGoogleApiAvailability 的 Android 应用
object Util {
@JvmStatic
@WorkerThread
fun getAdsClientInfo(context: Context): AdvertisingIdClient.Info? {
val isGPAvailable =
GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)
return if (isGPAvailable == ConnectionResult.SUCCESS) {
AdvertisingIdClient.getAdvertisingIdInfo(context) //<=== throws
} else null
}
}
在测试中:
@RunWith(RobolectricTestRunner.class)
public class TestAds{
public Application application;
@Before
public void setUp() throws Exception {
application = ApplicationProvider.getApplicationContext();
}
@Test
public void test_getAdsClientInfo() throws Exception {
final ShadowGoogleApiAvailability shadowGoogleApiAvailability
= Shadow.extract(GoogleApiAvailability.getInstance());
final int expectedCode = ConnectionResult.SUCCESS;
shadowGoogleApiAvailability.setIsGooglePlayServicesAvailable(expectedCode);
AdvertisingIdClient.Info info = Util.getAdsClientInfo(application);
......
}
}
它得到了 "IllegalStateException: Calling this from your main thread can lead to deadlock"
。
如何测试内部调用AdvertisingIdClient.getAdvertisingIdInfo
的函数?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。