Тестирование метода загрузки файлов конфигурации JSON в Golang

В тестируемом проекте Голанг есть метод, который загружает файл конфигурации JSON в переменную. Его код такой:

// Load the JSON config file
func Load(configFile string, outputObj interface{}) *errors.ErrorSt {
    var err error
    // Read the config file
    jsonBytes, err := ioutil.ReadFile(configFile)
    if err != nil {
        fmt.Println(err.Error())
        return errors.File().AddDetails(err.Error())
    }

    // Parse the config
    if err := json.Unmarshal(jsonBytes, outputObj); err != nil {
        return errors.JSON().AddDetails("Could not parse" + configFile + ": " + err.Error())
    }
    return nil

}

Я хочу протестировать его, но не знаю, должен ли я создавать поддельный файл JSON для тестовых случаев или просто имитировать всю функцию. Мой опыт работы с Java заставляет меня склоняться к последнему.

Исследуя это, я обнаружил, что фреймворк testify, в котором я использую есть пакет для имитации методов, но то, что я пытаюсь высмеять, не относится к интерфейсам (подводные камни не-ООП языков !!)

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
2 205
1

Ответы 1

Есть несколько способов сделать это. Конечно, нет ничего необычного в том, чтобы иметь образец файла данных для тестирования загрузки и анализа файла (вы найдете его в некоторых местах в стандартной библиотеке). Это также довольно распространенная практика, когда такая функция принимает io.Reader, а не путь к файлу, так что при тестировании вы можете просто передать, например, bytes.Reader, чтобы эффективно "имитировать" файл при тестировании всего остального. Какой метод использовать (или оба, если вы выберете) зависит от вашего варианта использования и целей дизайна; переход на io.Reader дает вам больше гибкости, но только вы знаете, имеет ли эта гибкость какое-либо значение в контексте. Если нет, просто сохраните тестовый файл вместе с вашими тестами и прочтите его.

Другие вопросы по теме