Android MockWebServer-ConnectException:无法连接到

Android MockWebServer-ConnectException:无法连接到,android,kotlin,mockwebserver,Android,Kotlin,Mockwebserver,当我开始我的测试,我得到连接异常,我不知道为什么 我找到了一些其他作者的代码并比较了代码,我没有发现任何错误。我试图改变端口或删除它,但它没有帮助我 @RunWith(AndroidJUnit4::class) class RideFragmentTest { @get:Rule val activityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)

当我开始我的测试,我得到连接异常,我不知道为什么

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

@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(..., ...)
    }
}

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

我解决了我的问题

我的代码应该是这样的:

@RunWith(AndroidJUnit4::class)
class RideFragmentTest {

private val fragment = RideFragment.newInstance()

@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(..., ...)
    }

    private fun routeToFragment() = activityRule
       .activity
       .supportFragmentManager
       .beginTransaction()
       .replace(R.id.container, fragment)
       .commit()
}
@RunWith(AndroidJUnit4::class)
类RideFragmentTest{
private val fragment=RideFragment.newInstance()
@获取:规则
val activityRule:ActivityTestRule=ActivityTestRule(MainActivity::class.java)
private val mockWebServer=mockWebServer()
专用val端口=8607
@以前
fun init(){
mockWebServer.start(端口)
}
@之后
有趣的结尾{
mockWebServer.shutdown()
}
@试验
有趣的测试{
val dispatcher=上面的代码。。
mockWebServer.dispatcher=dispatcher
routeToFragment()
资产显示(…,…)
}
private fun routeToFragment()=活动规则
.活动
.supportFragmentManager
.beginTransaction()
.替换(R.id.容器,碎片)
.commit()
}

i、 e.在设置dispatcher之后,我不得不路由我的片段,因为mockwebserver没有时间进行初始化,否则(我理解是这样的)。

我不确定,但尝试删除该片段port@GilGoldzweig谢谢你的回答。我试过了,但对我没有帮助。你能给我一个更详细的答案吗?什么方法是
routeToFragment()
?它只是在片段之间进行路由。我将尝试找到代码的这一部分,你所说的“片段之间的路由”是什么意思。由于这是解决方案的关键,我想您应该更详细地解释它。@ADroid我添加了有关routeToFragment()方法的信息。我希望你能理解这个代码。
@RunWith(AndroidJUnit4::class)
class RideFragmentTest {

private val fragment = RideFragment.newInstance()

@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(..., ...)
    }

    private fun routeToFragment() = activityRule
       .activity
       .supportFragmentManager
       .beginTransaction()
       .replace(R.id.container, fragment)
       .commit()
}