MockWebServer-ConnectException:无法连接到

时间:2019-06-04 12:25:29

标签: android kotlin mockwebserver

当我开始测试时,出现连接异常,我也不知道为什么。

我找到了一些其他作者的代码,并比较了代码,但我没有发现任何错误。我试图更改端口或将其删除,但并没有帮助我。

@RunWith(AndroidJUnit4::class)
class RideFragmentTest {

@get:Rule
    val activityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)
    private val mockWebServer = MockWebServer()
    private val PORT = 8607

@Before
    fun init() {
        mockWebServer.start(PORT)
        routeToFragment()
    }

@After
    fun finish() {
        mockWebServer.shutdown()
    }

@Test
    fun someTest() {
        val dispatcher = object : Dispatcher() {
            @Throws(InterruptedException::class)
            override fun dispatch(request: RecordedRequest): MockResponse {
                when (request.path) {
                    "/something/current" -> {
                        val jsonBody = asset(activityRule.activity, "something.json")
                        return MockResponse().setResponseCode(200).setBody(jsonBody)
                    }
                    "/something/save" -> {
                        return MockResponse().setResponseCode(200)
                    }
                }
                return MockResponse().setResponseCode(404)
            }
        }
        mockWebServer.dispatcher = dispatcher

        assertDisplayed(..., ...)
    }
}
D/OkHttp: --> GET http://127.0.0.1:8607/something/current
D/OkHttp: --> END GET
HTTP FAILED: java.net.ConnectException: Failed to connect to /127.0.0.1:8607

我没有发现任何奇怪的日志。

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。

我的代码应如下所示:

@RunWith(AndroidJUnit4::class)
class RideFragmentTest {

@get:Rule
    val activityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)
    private val mockWebServer = MockWebServer()
    private val PORT = 8607

@Before
    fun init() {
        mockWebServer.start(PORT)
    }

@After
    fun finish() {
        mockWebServer.shutdown()
    }

@Test
    fun someTest() {
        val dispatcher = code above..
        mockWebServer.dispatcher = dispatcher
        routeToFragment()

        assertDisplayed(..., ...)
    }
}

即我必须在设置调度程序后路由片段,因为模拟网络服务器没有时间进行初始化(我理解是这样)。