Как проверить ошибки БД в Go? - PullRequest
1 голос
/ 06 июля 2019

Я реализую хранилище, поддерживаемое leveldb (https://github.com/syndtr/goleveldb) на ходу. Я новичок на ходу и пытаюсь выяснить, как получить тестовое покрытие для условия в приведенном ниже коде, где perr! = Нет, я могу проверить свои собственные ошибки, но не могу понять, как надежно заставить метод Put leveldb возвращать ошибку. Макетирование базы данных только для того, чтобы получить тестовое покрытие для нескольких крайних случаев, кажется большой работой за небольшую награду. Является ли насмешливый leveldb моим единственным реальным выбором здесь? Если да, то какова рекомендуемая основа для насмешки? Если есть другой способ, что это?

    if err == leveldb.ErrNotFound {
            store.Lock()
            perr := store.ldb.Put(itob(p.ID), p.ToBytes(), nil)
            if perr != nil {
                    store.Unlock()
                    return &StorerError{
                            Message: fmt.Sprintf("leveldb put error could not create puppy %d : %s", p.ID, perr),
                            Code:    501,
                    }
            }
            store.Unlock()
            return nil
    }

1 Ответ

1 голос
/ 06 июля 2019

Mocking - это общий выбранный подход для такого рода тестов, поэтому, например, golang/mock имеет команду mockgen для generate тестовый код.

mockgen имеет два режима работы: исходный и отражающий.

  • Режим источника создает ложные интерфейсы изисходный файл.
    Он активируется с помощью флага -source.
    Другие флаги, которые могут быть полезны в этом режиме: -imports и -aux_files.

Пример:

mockgen -source=foo.go [other options]
  • Режим отражения генерирует фиктивные интерфейсы путем создания программы, использующей отражение для понимания интерфейсов.
    Этовключается передачей двух аргументов без флага: путь импорта и список символов через запятую.

Пример:

mockgen database/sql/driver Conn,Driver
...