Я пытаюсь запустить некоторые модульные тесты в приложении Go, которое использует Gin. Модульные тесты вызывают следующую функцию:
func executeTest(t *testing.T, configurer EngineConfigurer) *httptest.ResponseRecorder {
var router = gin.New()
recorder := httptest.NewRecorder()
configurer(router)
urlTemplate := "/v1/something"
router.GET(urlTemplate, SomeHandler)
req, err := http.NewRequest("GET", "/v1/something", nil)
if err != nil {
t.Fatal("There was an error preparing the request: " + err.Error())
} else {
router.ServeHTTP(recorder, req)
}
return recorder
}
EngineConfigurer - это функция, которая получает маршрутизатор на вход и в конечном итоге добавляет некоторые промежуточные программы, которые я использую для тестирования различных вариантов использования. Например, один из них добавляет параметр в заголовок запроса.
Что-то не так с этим подходом? Когда я выполняю эти тесты в моей локальной сборке, все работает, но когда те же самые тесты выполняются нашим CI, пара тестов завершается неудачей, потому что кажется, что они находят в заголовке параметр, который был установлен другим тестом.
Поскольку я создавал маршрутизатор с нуля, я думал, что выполнение тестов было независимым.
Примеры конфигураторов Engine:
func(router *gin.Engine) {
router.Use(func(gc *gin.Context) {
gc.Request.Header.Del("Id")
})
func(router *gin.Engine) {
router.Use(func(gc *gin.Context) {
gc.Request.Header.Set("Id", "000-111")
})