Get Go Unit Testing (3) — Утверждение (свидетельство)

Go

В последней статье были представлены табличный метод тестирования и структура тестирования gomock, что значительно повысило эффективность и качество тестирования. В этой статье будет представлено введение утверждений в тестирование для дальнейшего повышения эффективности и качества тестирования.

Зачем вам нужна библиотека утверждений

Давайте сначала разберемся, почему в стандартном пакете Go нет утверждений, официальный ответ на этот вопрос есть в FAQ.

golang.org/doc/ инициирует #ass…

Общий смысл таков: «Go не предоставляет утверждений, которые, как мы знаем, будут доставлять неудобства, и его основная цель — уберечь вас, программистов, от лени в обработке ошибок. Мы знаем, что это спорный момент, но мы чувствуем это. Очень круто~~." Итак, причина, по которой мы представили библиотеку утверждений, также очевидна:быть ленивым, введение утверждений может обеспечить нам удобство — повысить эффективность тестирования и улучшить читаемость кода.

testify

С точки зрения выбора библиотеки утверждений у нас, кажется, не так уж много вариантов, С точки зрения количества запусков и активности, это в основномtestifyВыдающийся.

GitHub.com/stretch R/Специальные…

Нет никакого сравнения с отсутствием вреда, взгляните на использованиеtestifyПеред методами тестирования:

func TestSomeFun(t *testing.T){
...
    if v != want {
        t.Fatalf("v值错误,期望值:%s,实际值:%s", want, v)
    }
    if err != nil {
        t.Fatalf("非预期的错误:%s", err)
    }
    if objectA != objectB {
        if objectA.field1 !=  objectB.field1 {
            // t.Fatalf() field1值错误...bla bla bla
        }
         if objectA.field2 !=  objectB.field2 {
            // t.Fatalf() field2值错误...bla bla bla
        }
        // 遍历object所有值... bla bla bla
    }
...
}

Код залилif...else..Суждение, сборка больших кусков информации об ошибках (настоящая физическая работа...), если вам не повезло, вам нужно пройтись по структуре, чтобы судить об этом - не интуитивно, неэффективно и действительно не модно.
Теперь мы используемtestifyДавайте изменим приведенный выше тестовый пример:

func TestSomeFun(t *testing.T){
    a := assert.New(t)
...
    a.Equal(v, want)
    a.Nil(err,"如果你还是想输出自己拼装的错误信息,可以传第三个参数")
    a.Equal(objectA, objectB)
...
}

Сделано три строчки, и смысл теста понятен с первого взгляда - интуитивно, эффективно, коротко, модно.

в заключении

Testify прост в использовании и имеет значительные улучшения, его можно описать как ленивый артефакт, в который вы влюбитесь, как только начнете им пользоваться. Объединив табличное тестирование, gomock и testify, мы смогли написать элегантный и красивый код модульного тестирования. Однако недостаточно элегантно протестировать код, нам также нужна помощь.main.goОденься тоже. В следующей и последней статье этой серии мы представим инфраструктуру внедрения зависимостей проводов, которая помогаетmain.goПохудение.