簡體   English   中英

java.lang.ClassCastException:android.app.Application無法轉換為com.google.android.apps.common.inject.InjectedApplication

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM