Тестирование метода загрузки файлов конфигурации 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, в котором я использую есть пакет для имитации методов, но то, что я пытаюсь высмеять, не относится к интерфейсам (подводные камни не-ООП языков !!)

3
0
2 205
1

Ответы 1

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

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