Когда я пытаюсь использовать go-vcr со структурами, содержащими uuid.UUID от github.com/satori/go.uuid, я не получаю никаких значений. Тестирование с другими структурами без типов uuid.UUID работает как положено.
Редактировать: go-vcr - это модуль go для записи HTTP-взаимодействий для воспроизведения: https://github.com/dnaeon/go-vcr
Тестирование с помощью Ginkgo и Gomega (для краткости пропущен тестовый код)
Go версия:
go версия go1.12 darwin / amd64
type Test2 struct {
ID uuid.UUID `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
}
func (s *UserService) Test2() *Test2 {
url := fmt.Sprintf("%v:%v/test", s.ServiceHost, s.ServicePort)
var client = &http.Client{Timeout: 10 * time.Second}
req, err := http.NewRequest("GET", url, nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", s.ServiceToken))
resp, err := client.Do(req)
if err != nil {
return nil
}
defer resp.Body.Close()
var t Test2
json.NewDecoder(resp.Body).Decode(&t)
return &t
}
Крепеж:
---
version: 1
interactions:
- request:
body: ""
form: {}
headers:
Authorization:
- Bearer 123abc
Content-Type:
- application/json
url: http://localhost:8080/test2
method: GET
response:
body: |
{"id":"5600966e-4ad6-4f79-8e01-8db13ba5c212","name":"Foo","description":"Bar"}
headers:
Content-Length:
- "79"
Content-Type:
- application/json
Date:
- Fri, 19 Apr 2019 18:49:03 GMT
status: 200 OK
code: 200
duration: ""
Тестовый код:
us := UserService{
ServiceHost: "http://localhost",
ServicePort: 8080,
ServiceToken: "123abc",
}
url = fmt.Sprintf("%v:%v/test", us.ServiceHost, us.ServicePort)
req, err = http.NewRequest("GET", url, nil)
Expect(err).To(BeNil())
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", us.ServiceToken))
resp, err = client.Do(req)
Expect(err).To(BeNil())
defer resp.Body.Close()
t := us.Test()
Expect(t.Description).To(Equal("Bar"))
r, err = recorder.New("fixtures/test2")
Expect(err).To(BeNil())
defer r.Stop()
client = &http.Client{
Transport: r,
}
url = fmt.Sprintf("%v:%v/test2", us.ServiceHost, us.ServicePort)
req, err = http.NewRequest("GET", url, nil)
Expect(err).To(BeNil())
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", us.ServiceToken))
resp, err = client.Do(req)
Expect(err).To(BeNil())
defer resp.Body.Close()
t2 := us.Test2()
iDString := "5600966e-4ad6-4f79-8e01-8db13ba5c212"
id, err := uuid.FromString(iDString)
Expect(err).To(BeNil())
Expect(t2.ID).To(Equal(id))
Fails with
�[91mExpected
<uuid.UUID>: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
to equal
<uuid.UUID>: [86, 0, 150, 110, 74, 214, 79, 121, 142, 1, 141, 177, 59, 165, 194,
Редактировать: Все еще интересует, почему это не работает, но в итоге ушел с другой библиотекой воспроизведения HTTP Record, у которой нет этой проблемы https://github.com/ad2games/vcr-go