API. Сейчас реализую регистрацию. У меня есть handler, который берет данные пользователя и отправляет их на другой уровень service. Service общается с другим уровнем на котором база данных. Структуру и код могу прислать. Все работает хорошо, но я решил написать тесты. Сделал моки service-а, и тестирую handler. Но вот незадача, у меня в service есть логика(валиден ли пароль, нормальное имя пользователя и тд.), а моки "сьели" всю эту логику. Надеюсь вы поняли меня, я имею в виду, что в моках нет моего кода, только автосгенерированный.
Вопрос: как мне протестировать hendler, чтобы логика в service не пропадала. Или проще - как тестировать?)))
Буду благодарен любому ответу!
можно тестировать отдельно ручку, отдельно метод сервиса
правильно раздели слои
Хм, но они же работают вместе? Я о том, можно ли протестировать мой Handler через httptest? Вот кусочек кода из тестов. handler := http.HandlerFunc(h.signUp) r, err := http.NewRequest("POST", "/sign-up", strings.NewReader(testCase.inputBody)) if err != nil { t.Error(err) } w := httptest.NewRecorder() handler.ServeHTTP(w, r) а дальше assert
хм, а как лучше?
а что ты тут тестировать собрался? тут бизнес кода нет
так, как бы обьяснить, хммм. В хендлере у меня запрос принимается и отправляется на следующий слой service. Вот код: func (a *AuthService) CreateUser(user structs.User) (int, error) { if !isCorrectPassword(user.Password) { return -1, errors.New("Incorrect password: it must contain at least 8 characters (alphabet, numbers, !@#$%^&*)") } user.Password = generatePasswordHash(user.Password) jsonInfoString, err := json.Marshal(user.Info) if err != nil { return -1, err } user.Info = jsonInfoString return a.repo.CreateUser(user) } И я тестирую через httptest прямо api
isCorrectPassword - это что? глобальная функция какая-то? или в модуле функция? почему она не в a?
это функция в service, я просто прислал не весь код service-a, а только метод CreateUser
Обсуждают сегодня