2015-12-03 3 views
2

Я пытаюсь использовать т Robolectricjava.lang.ClassCastException: android.app.Application не может быть приведен к com.google.android.apps.common.inject.InjectedApplication

@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("")); 
    } 
} 

PROD код:

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) 

, что я делаю не так?

ответ

0

Может быть, вам нужна ваша SetPaymentActivityTest к простирается InjectedApplication

так:

public class SetPaymentActivityTest extends InjectedApplication { 
+0

Почему, я никогда не видел его ни в одном примере –

+0

Это только гипотеза. Или, возможно, SetPaymentActivity необходимо расширить. Попробуйте, если это поможет. – JFPicard

+0

Я не могу изменить код PROD –

0

Это легко исправить.

Изменить код теста следующий:

@RunWith(RobolectricGradleTestRunner.class) 
@Config(
     constants = BuildConfig.class, 
     qualifiers = "fr-normal-port-hdpi", 
     sdk = 21) 

Проблема заключается в том, что Robolectric пытается использовать Application, как было указано в конфигурации и в какой-то момент вы бросая его в класс

0

Я создал фиктивная класс TestApplication:

public TestApplication extends InjectedApplication

и сконфигурирован:

@Config(
     manifest = "...mypath.../AndroidManifest.xml", 
     qualifiers = "fr-normal-port-hdpi", 
     sdk = 21, 
     application = TestApplication.class) 

 Смежные вопросы

  • Нет связанных вопросов^_^