Помехи между модульными тестами в приложении, написанном с Go и Gin - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь запустить некоторые модульные тесты в приложении 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")
    })
...