java.lang.NoSuchMethodError:androidTest上没有静态方法initializeInstanceForTests()MockWebServer

时间:2017-03-09 01:04:03

标签: android mockwebserver

我无法在androidTest文件夹中初始化MockWebServer。我已经在我的gradle上添加了这一行     androidTestCompile('com.squareup.okhttp3:mockwebserver:3.6.0') { exclude group: 'com.squareup.okio', module: 'okio' exclude group: 'com.squareup.okhttp3', module: 'okhttp' }

我试图遵循https://github.com/riggaroo/android-retrofit-test-examples的实施。我克隆了该项目,将此示例使用的MockWebServer版本更改为最新版本,但它仍然可以正常工作,但我项目的实现仍然给出了同样的错误。

java.lang.NoSuchMethodError: No static method initializeInstanceForTests()V in class Ld/a/a; or its super classes (declaration of 'd.a.a' appears in /data/app/com.agri.fma-2/base.apk)
at okhttp3.mockwebserver.MockWebServer.<clinit>(MockWebServer.java:101)
at com.agri.fma.activity.TestInputTenantActivity.setUp(TestInputTenantActivity.java:68)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1886)

下面是TestInputTenantActivity代码

public class TestInputTenantActivity {
    @Rule public IntentsTestRule<InputTenantActivity> activityTestRule =
            new IntentsTestRule<>(InputTenantActivity.class, false, false);

    @Inject InputTenantView view;

    @Mock
    SharedPreferenceManager sharedPreferenceManager;
    private TestMainApplication app;
    private MockWebServer mockWebServer;

    @Before
    public void setUp() throws Exception {

        app = (TestMainApplication) InstrumentationRegistry.getInstrumentation()
                .getTargetContext().getApplicationContext();

        DaggerTestInputTenantComponent.builder().testAppComponent(app.getAppComponent())
                .testInputTenantModule(new TestInputTenantModule())
                .build().inject(this);

        mockWebServer = new MockWebServer();
        mockWebServer.start();
    }

    @Test
    public void testEmptyTenant(){
        activityTestRule.launchActivity(new Intent());
        onView(withId(R.id.tenant)).perform(typeText(""));
        onView(withId(R.id.action_next)).perform(click());
        onView(withId(R.id.tenant)).check(matches(hasErrorText(app.getString(R.string.empty_tenant))));
        intended((hasComponent(new ComponentName(getTargetContext(), LoginActivity.class))), times(0));
    }

    @Test
    public void testTenantWithWhiteSpace(){
        String errorMessage = String.format(
                Locale.US,
                app.getString(R.string.invalid_string_error),
                "Tenant name");
        activityTestRule.launchActivity(new Intent());
        onView(withId(R.id.tenant)).perform(typeText(TENANT_WITH_WHITESPACE));
        onView(withId(R.id.action_next)).perform(click());
        onView(withId(R.id.tenant)).check(matches(hasErrorText(errorMessage)));
        intended((hasComponent(new ComponentName(getTargetContext(), LoginActivity.class))), times(0));
    }

    @Test
    public void testValidTenant(){
        activityTestRule.launchActivity(new Intent());
        onView(withId(R.id.tenant)).perform(typeText(VALID_TENANT));
        onView(withId(R.id.action_next)).perform(click());
        intended(hasComponent(new ComponentName(getTargetContext(), LoginActivity.class)));
    }

    @After
    public void tearDown() throws Exception {
        mockWebServer.shutdown();
    }
}

0 个答案:

没有答案