Пройдите тестирование с помощью ExampleTest - ожидаемое несоответствие выходных данных - PullRequest
0 голосов
/ 16 февраля 2019
Running tool: /usr/local/go/bin/go test -timeout 30s -run ^(ExampleBuild)$

--- FAIL: ExampleBuild (0.00s)
got:
POST localhost/status?t=1 HTTP/1.1
Content-Type: application/json
want:
POST localhost/status?t=1 HTTP/1.1
Content-Type: application/json
FAIL
exit status 1

Я пытаюсь написать тест в go, используя метод Example.Я создал запрос http с заголовком (Content-Type: application / json), параметром запроса t = 1, типом метода POST и URL localhost.

Вывод в got: и want: выглядит одинаково, также проверил наличие пробельных символов.Не могу понять, в чем разница между этими двумя здесь.

Не могу понять, что мне здесь не хватает.

import (
   "fmt"
   "net/http"
   "net/http/httputil"
)

func ExampleBuild() {

    req, err := http.NewRequest(http.MethodPost, "localhost/status?t=1", nil)
    req.Header.Add("content-type", "application/json")
    if err != nil {
        panic(err)
    }

    str, err := httputil.DumpRequest(req, false)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s", string(str))
    // Output:
    // POST localhost/status?t=1 HTTP/1.1
    // Content-Type: application/json

}

1 Ответ

0 голосов
/ 16 февраля 2019

Я думаю, что в заголовке HTTP есть \r\n для перевода строки .Так вот что возвращает httputil.DumpRequest.Но вы, вероятно, редактируете этот файл на машине, которая не использует \r\n для разрывов строк, поэтому разница возникает оттуда.

Грубый метод успешного сравнения будет:

fmt.Println(strings.Replace(string(str), "\r", "", -1))

, который удаляет "\ r" из строки, выгруженной по HTTP, и будет успешно сравниваться, если ваш редактор использовал только "\ n" для прерывания ожидаемого вывода.

Более элегантное решениебудет зависеть от специфики вашей среды тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...