MockWebServer - ConnectException:无法连接到
MockWebServer - ConnectException: Failed to connect to
当我开始测试时出现连接异常,我不知道为什么。
我找到了一些其他作者的代码并比较了代码,我没有发现任何错误。我尝试更改端口或将其删除,但没有帮助。
@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
我没有发现任何奇怪的日志。
我解决了我的问题。
我的代码应该是这样的:
@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()
}
即我必须在设置调度程序后路由我的片段,因为 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
我没有发现任何奇怪的日志。
我解决了我的问题。
我的代码应该是这样的:
@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()
}
即我必须在设置调度程序后路由我的片段,因为 mockwebserver 没有时间进行初始化(我是这样理解的)。