![](/img/trans.png)
[英]java.lang.ClassCastException: android.app.Application cannot be cast
[英]java.lang.ClassCastException: android.app.Application cannot be cast to com.google.android.apps.common.inject.InjectedApplication
我正在嘗試使用Robolectric
@RunWith(RobolectricTestRunner.class)
@Config(
manifest = "...mypath.../AndroidManifest.xml",
qualifiers = "fr-normal-port-hdpi",
sdk = 21,
application = Application.class)
public class SetPaymentActivityTest {
@Before
public void setUp() throws Exception {
}
@Test
public void sendWrongPaymentDetails() throws Exception {
SetPaymentActivity activity = Robolectric.buildActivity(SetPaymentActivity.class)
// .attach()
.create()
// .starst()
// .resume()
// .visible()
.get();
activity = Robolectric.setupActivity(SetPaymentActivity.class);
// Shadows.shadowOf(SetPaymentActivity.class);
String url = activity.getUrl();
assertThat(url, equalTo(""));
}
}
產品代碼:
public class SetPaymentActivity extends FragmentActivity implements DaggerActivity {
但是我得到這個錯誤:
Time: 109.712
There was 1 failure:
1) sendWrongPaymentDetails(com.google.android.apps.ridematch.payments.SetPaymentActivityTest)
java.lang.ClassCastException: android.app.Application cannot be cast to com.google.android.apps.common.inject.InjectedApplication
at com.google.android.apps.common.inject.ActivityInjectHelper.initGraph(ActivityInjectHelper.java:56)
我究竟做錯了什么?
也許您需要SetPaymentActivityTest
來擴展InjectedApplication
像這樣:
public class SetPaymentActivityTest extends InjectedApplication {
很容易修復。
將測試代碼更改為下一個:
@RunWith(RobolectricGradleTestRunner.class)
@Config(
constants = BuildConfig.class,
qualifiers = "fr-normal-port-hdpi",
sdk = 21)
問題是Robolectric
嘗試使用您在config中指定的Application
,並在某個時候將其強制轉換為您的類
我創建了一個虛擬的TestApplication類:
public TestApplication extends InjectedApplication
並配置:
@Config(
manifest = "...mypath.../AndroidManifest.xml",
qualifiers = "fr-normal-port-hdpi",
sdk = 21,
application = TestApplication.class)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.