当使用MockWebServer启动Espresso测试时,我得到SocketTimeOutException

时间:2019-04-21 13:26:57

标签: android-espresso ui-testing mockwebserver

Android Studio 3.3

这是我在MockWebServer上进行的Espresso测试:

import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import org.junit.After

@RunWith(AndroidJUnit4::class)
class TradersActivityTest {
    private val context = InstrumentationRegistry.getInstrumentation().getContext()
    private val TAG = TradersActivityTest::class.java.name

    @Rule
    @JvmField
    var tradersIntentTestRule = IntentsTestRule(TradersActivity::class.java, false, false)

    @Before
    fun setup() {
        mockServer = MockWebServer()
        mockServer.start(8081)
        Debug.d(TAG, "SUCCCESS_START_MOCKWEBSRVER")
        val intent = Intent(targetContext, TradersActivity::class.java)
        tradersIntentTestRule.launchActivity(intent)
    }

    @Test
    fun oneTrader_manyWalletList() {
        Debug.d(TAG, "oneTrader_manyWalletList_start")
        mockServer.enqueue(MockResponse()
                .setResponseCode(200)
                .setBody(RestServiceTestHelper.getStringFromFile(context, "trader_6_wallet.json")));

        onView(withId(R.id.noTradersTextView))
                .check(matches(not(isDisplayed())))
}

如您所见,在开始测试之前,我在端口 8081 上启动MockWebServer

开始测试oneTrader_manyWalletList时,我得到SocketTimeoutException

这里是logcat:

04-21 16:13:24.808 D/com.myprojectui.activity.TradersActivity(20739): onCreate: savedInstanceState = null
04-21 16:13:24.929 D/com.myprojectapi.RestClientFactory(20739): static_initializer: START_GSON_setting!
04-21 16:13:24.930 D/com.myprojectapi.RestClientFactory(20739): static_initializer: END_GSON_setting!
04-21 16:13:24.957 D/com.myprojectui.activity.TradersActivity(20739): init: tradersViewModel = com.myprojectviewmodel.TradersViewModel@bc11d1e
04-21 16:13:24.959 D/OkHttp  (20739): --> GET http://127.0.0.1:8081/traders/json http/1.1
04-21 16:13:24.959 D/LifecycleMonitor(20739): Lifecycle status change: com.myprojectui.activity.TradersActivity@c36fdf1 in: CREATED
04-21 16:13:24.960 D/LifecycleMonitor(20739): Lifecycle status change: com.myprojectui.activity.TradersActivity@c36fdf1 in: STARTED
04-21 16:13:24.960 D/LifecycleMonitor(20739): Lifecycle status change: com.myprojectui.activity.TradersActivity@c36fdf1 in: RESUMED

您可以看到在端口 8081 上的TradersActivity开始http请求以获取交易者列表

OkHttp  (20739): --> GET http://127.0.0.1:8081/traders/json http/1.1

但是几秒钟后,我得到SocketTimeOutException:

04-21 16:13:34.798 I/StreamController( 2002): cleanUpControllerScope(nowcards-15-2ece5ba9-92e5)
04-21 16:13:34.977 D/OkHttp  (20739): <-- HTTP FAILED: java.net.SocketTimeoutException
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739): onFailure: Error: null
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739): java.net.SocketTimeoutException
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at java.net.PlainSocketImpl.read(PlainSocketImpl.java:484)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at java.net.PlainSocketImpl.-wrap0(PlainSocketImpl.java)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at okio.Okio$2.read(Okio.java:140)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at okio.RealBufferedSource.indexOf(RealBufferedSource.java:354)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:226)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:215)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
04-21 16:13:34.988 E/com.myproject.api.DefaultRestClientCallback(20739):    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)

为什么?

0 个答案:

没有答案