0

自分の活動を確認するために機器テストを開始します。アクティビティのボタンを押すと、http リクエストが呼び出されます。だから私はクリックをテストします

@Test
   fun click_checkRequest() {
       mockServer.enqueue(
           MockResponse()
                    .setResponseCode(200)
       )

       myContainer.click()
       val request = mockServer.takeRequest();
       Assert.assertEquals("POST", request.method)
       assertThat(request.path, CoreMatchers.containsString("/event?"))
       assertThat(
           request.body.readUtf8(), CoreMatchers.containsString( """type":1""")
       )
   }

ここにログ:

11-29 11:06:26.952 D/OkHttp  (15697): --> POST http://127.0.0.1:8081/event?table_token=11&device_id=111111 http/1.1
11-29 11:06:26.952 D/OkHttp  (15697): Content-Type: application/json; charset=UTF-8
11-29 11:06:26.952 D/OkHttp  (15697): Content-Length: 10
11-29 11:06:26.953 D/OkHttp  (15697): {"type":1}
11-29 11:06:26.953 D/OkHttp  (15697): --> END POST (10-byte body)
11-29 11:06:26.968 I/MockWebServer(15697): MockWebServer[8081] received request: POST /event?table_token=my_token&user=my_user&device_id=my_device HTTP/1.1 and responded: HTTP/1.1 200 OK
11-29 11:06:26.969 D/OkHttp  (15697): <-- 200 OK http://127.0.0.1:8081/event?table_token=my_token&user=my_user&device_id=my_device (16ms)
11-29 11:06:26.969 D/OkHttp  (15697): Content-Length: 0
11-29 11:06:26.969 D/OkHttp  (15697): <-- END HTTP (0-byte body)

順調です。リクエストのボディ コンテンツは "type":1" です。結果として、テストはパスです。いいですね。

しかし、私のアクティビティ(作成時)は、バックグラウンドで定期的に(5秒ごとに)次のhttpリクエストを開始します:

11-29 11:59:35.843 D/OkHttp  ( 1116): --> GET http://127.0.0.1:8081/event?orgn=17 http/1.1
11-29 11:59:35.843 D/OkHttp  ( 1116): --> END GET
11-29 11:59:35.862 I/MockWebServer( 1116): MockWebServer[8081] received request: GET /event?orgn=17 HTTP/1.1 and responded: HTTP/1.1 200 OK
11-29 11:59:35.863 D/OkHttp  ( 1116): <-- 200 OK http://127.0.0.1:8081/event?orgn=17 (20ms)
11-29 11:59:35.863 D/OkHttp  ( 1116): Content-Length: 0
11-29 11:59:35.863 D/OkHttp  ( 1116): <-- END HTTP (0-byte body)

11-29 11:59:35.940 D/OkHttp  ( 1116): --> POST http://127.0.0.1:8081/event?table_token=11&device_id=111111 http/1.1
11-29 11:59:35.940 D/OkHttp  ( 1116): Content-Type: application/json; charset=UTF-8
11-29 11:59:35.940 D/OkHttp  ( 1116): Content-Length: 10
11-29 11:59:35.940 D/OkHttp  ( 1116): {"type":1}
11-29 11:59:35.940 D/OkHttp  ( 1116): --> END POST (10-byte body)

あなたが見ることができるように、私のテスト実行前の開始GET http://127.0.0.1:8081/event?orgn=17POSTそして 、結果として、ステータス 200 は私のテストの HTTP リクエストではありません。http://127.0.0.1:8081/event?table_token=11&device_id=111111

その結果、私のテストは失敗します。テストで正確にhttp 応答コード = 200を返すことは可能ですか?

4

1 に答える 1

0

解決策を見つけました(@Blundellに感謝)

  @Test
    fun click_checkRequest()() {
        //stub response
        // first request "/event?orgn=17"  - polling
        mockServer.enqueue(MockResponse().setResponseCode(200))
        // second request "/event?table_token="
        mockServer.enqueue(MockResponse().setResponseCode(200))
        waitressCallContainer.click()
        //  confirm that app made the HTTP requests you were expecting
        val firstRequest = mockServer.takeRequest()
        val secondRequest = mockServer.takeRequest()
        Assert.assertEquals("POST", secondRequest.method)
        assertThat(secondRequest.path, CoreMatchers.containsString("/event?table_token"))
        assertThat(
            secondRequest.body.readUtf8(), CoreMatchers.containsString(
                """type":${Type.CALL_WAITRESS.ordinal}"""
            )
        )
    }
于 2019-12-15T15:19:55.350 に答える