Android-эспрессо с кинжалом

Я пытаюсь запустить тест инструмента Android с помощью библиотеки Espresso, особенно Double-Espresso.

Я знаю, что Espresso уже имеет зависимость от кинжала 1.2.1, и мое приложение также использует ту же версию кинжала. Поэтому я объявил такую ​​​​зависимость.

// dagger-compiler already includes dagger.
compile 'com.squareup.dagger:dagger-compiler:1.2.1'

androidTestCompile 'com.google.guava:guava:16.0'
androidTestCompile 'javax.annotation:javax.annotation-api:1.2'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'
androidTestCompile('com.jakewharton.espresso:espresso-support-v4:1.1-r3') {
    exclude group: 'com.android.support', module: 'support-v4'
    exclude group: 'com.google.guava', module: 'guava'
    exclude group: 'com.squareup.dagger'
    //exclude group: 'javax.annotation', module: 'javax.annotation-api'
}

И мой тест выглядит так.

@LargeTest
public class IntegrationTest extends ActivityInstrumentationTestCase2<LoginSelectMethodActivity> {

    public IntegrationTest() {
    // This constructor was deprecated - but we want to support lower API levels.
        super("com.google.android.apps.common.testing.ui.testapp", LoginSelectMethodActivity.class);
    }
    @Override
    public void setUp() throws Exception {
        super.setUp();
        getActivity();
    }

    @LargeTest
    public void test_actionButtonEnableWhenInputsAreValid() {
        Espresso.onView(ViewMatchers.withId(R.id.signin_email))
                .perform(ViewActions.click());

        Espresso.onView(ViewMatchers.withText(R.id.et_email))
                .perform(ViewActions.typeText("[email protected]"), ViewActions.pressKey(KeyEvent.KEYCODE_ENTER),
                        ViewActions.typeText("aGoodP455w0rd"), ViewActions.pressKey(KeyEvent.KEYCODE_ENTER));

        Espresso.onView(ViewMatchers.withId(R.id.b_signin))
                .check(matches(withText(R.string.sign_in)));
    }

}

Однако тест терпит неудачу, и в журнале говорится, что он не может найти один из методов кинжала.

08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug W/dalvikvm﹕ VFY: unable to resolve virtual method 15010: Ldagger/ObjectGraph;.get (Ljava/lang/Class;)Ljava/lang/Object;
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0015
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug I/dalvikvm﹕ Could not find method dagger.ObjectGraph.get, referenced from method com.google.android.apps.common.testing.ui.espresso.Espresso.registerIdlingResources
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug W/dalvikvm﹕ VFY: unable to resolve virtual method 15010: Ldagger/ObjectGraph;.get (Ljava/lang/Class;)Ljava/lang/Object;
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0009
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug I/dalvikvm﹕ Could not find method dagger.ObjectGraph.get, referenced from method com.google.android.apps.common.testing.ui.espresso.Espresso.registerLooperAsIdlingResource
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug W/dalvikvm﹕ VFY: unable to resolve virtual method 15010: Ldagger/ObjectGraph;.get (Ljava/lang/Class;)Ljava/lang/Object;
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0006
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug I/dalvikvm﹕ Could not find method dagger.ObjectGraph.get, referenced from method com.google.android.apps.common.testing.ui.espresso.Espresso.setFailureHandler
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug W/dalvikvm﹕ VFY: unable to resolve virtual method 15010: Ldagger/ObjectGraph;.get (Ljava/lang/Class;)Ljava/lang/Object;
08-27 22:24:13.979    4074-4087/com.trumpia.android.loyaltea.debug D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0006
...
08-27 22:24:14.031    4074-4087/com.trumpia.android.loyaltea.debug I/TestRunner﹕ ----- begin exception -----
08-27 22:24:14.031    4074-4087/com.trumpia.android.loyaltea.debug I/TestRunner﹕ java.lang.NoSuchMethodError: dagger.ObjectGraph.get
            at com.google.android.apps.common.testing.ui.espresso.Espresso.onView(Espresso.java:51)

Я запускаю тест в Android Studio с помощью GoogleInstrumentationTestRunner. Надеюсь, кто-нибудь может дать мне немного света для этого.


person Chk0nDanger    schedule 27.08.2014    source источник


Ответы (1)


Вы должны зависеть от кинжала.

заменить это:

// dagger-compiler already includes dagger.
compile 'com.squareup.dagger:dagger-compiler:1.2.1'

с этим:

compile 'com.squareup.dagger:dagger:1.2.1'
provided 'com.squareup.dagger:dagger-compiler:1.2.1'
person yogurtearl    schedule 28.08.2014
comment
О, фантастика... на самом деле сначала у меня была такая же ошибка, однако я обнаружил, что включил runProguard true в режиме debug. Так что если я выключу, он работает. Включил, потому что при выключении выдает ошибку method ID not in [0, 0xffff]: 65536. Благодаря вашему коду, который помечает dagger-compiler как предоставленный, я могу избежать этой ошибки. Благодарю вас! - person Chk0nDanger; 28.08.2014