MockWebServer – ConnectException: не удалось подключиться к

Когда я начинаю свой тест, я получаю исключение подключения, и я понятия не имею, почему.

Я нашел код других авторов и сравнил код, и я не нашел ничего плохого. Я пытался изменить порты или удалить его, и это мне не помогло.

@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

Никаких странных логов я не нашел.


person Павел Архипов    schedule 04.06.2019    source источник
comment
Я не уверен, но попробуйте удалить порт   -  person Gil Goldzweig    schedule 04.06.2019
comment
@GilGoldzweig спасибо за ваш ответ. я пробовал и мне не помогло   -  person Павел Архипов    schedule 04.06.2019


Ответы (1)


Я решил свой вопрос.

Мой код должен быть таким:

@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 не было времени для инициализации (я так понимаю).

person Павел Архипов    schedule 21.06.2019
comment
не могли бы вы дать более подробный ответ? Что за метод routeToFragment()? - person Mr.Ustiik; 22.01.2021
comment
Это просто маршрутизация между фрагментами. попробую найти эту часть кода - person Павел Архипов; 25.01.2021
comment
Что вы подразумеваете под маршрутизацией между фрагментами. Поскольку это ключ к вашему решению, я думаю, вы объясните его более подробно. - person A Droid; 05.05.2021
comment
@ADroid Я добавил информацию о методе routeToFragment(). Надеюсь, вы поймете этот код. - person Павел Архипов; 05.05.2021