Софтуерното тестване е процес, който оценява показателите на програмите с помощта на инструменти, скриптове или ръчно.

Тестването е неразделна част от цикъла на разработка на софтуер. Цялостното тестване предоставя задълбочена информация за целостта на вашето приложение.

Можете да предотвратявате и коригирате грешки чрез писане на тестове, оценка на ефективността на програмата и автоматизиране на работните потоци.

Първи стъпки с тестването в Go

Стандартната библиотека Go предоставя развиваща се тестване пакет. The тестване пакетът има бенчмаркинг, размиване, прескачане, подтестване, подбенчмаркинг и други функции.

Тестването с този пакет е лесно. Ето една проста тестова структура, която ще служи като модел за теста:

Тип Случаи структура {
// очакваният резултат от теста
очакван вътр

// изхода на функцията
действителен вътр

// стойността, която предавате на функцията
аргумент низ
}

Ето една проста функция, която преобразува низове в цели числа. Вашият тест ще тества тази функция.

импортиране (
"strconv"
instagram viewer

)

функStringToInteger(ул низ)вътр {
цяло число, грешка := strconv. Атои (ул.)

ако грешка!= нула {
връщане0
}

връщане цяло число
}

The StringToInteger функцията се връща 0 ако има грешка при преобразуването и цялото число, ако няма грешки.

Ето една тестова функция за StringToInteger:

функTestStringToInteger(тест *тестване. T) {
очакваноInt := StringToInteger("3")

caseInstance := Случаи {
очаквано: очаквано Int,
действително: 3,
}

ако caseInstance.expected == caseInstance.actual {
// малко код тук
} друго {
тест. неуспешно ()
}
}

The TestStringToInteger тестовата функция приема a тестване. T обект като негов аргумент. The очаквано Int променлива съдържа резултата от преобразуването на низ. The caseInstance променлива е инстанцираната Cases структура за теста. The ако изявлението сравнява очакваните и действителните стойности.

The Неуспех метод връща неуспешен тест в оператора else, ако стойностите не са равни.

Go предоставя a тест команда за автоматизиране и извличане на информация за вашите тестове и програми.

отивам тест
отивам помощен тест

Помощната страница предоставя подробна информация как иди на тест върши работа:

Екосистемата Go е дом на много библиотеки, които правят тестването по-достъпно и гъвкаво. Има много функционалност отвъд тестване пакет, включително регресия и модулно тестване.

Пакетът свидетелство

Пакетът Testify е една от най-популярните Go рамки за тестване на пакети. Той предоставя инструменти, от които ще се нуждаете, за да пишете ефективни тестове, с лесни функции за твърдения, подигравки и пакети за тестване.

Testify е подходящ за тестово разработка, тъй като пакетът предоставя a подигравам се пакет. Това осигурява механизъм за писане на фалшиви обекти, които можете да използвате вместо реални обекти при тестване.

Пакетът предоставя още:

  • Ан твърдят пакет, който предоставя полезни методи за писане на удобни, четливи тестове.
  • А изискват пакет, подобен на твърдят пакет за връщане на булеви резултати.
  • А апартамент пакет за тестови пакети със структури.

Свидетелстване се простира върху тестване пакет и можете да използвате иди на тест команда за изпълнение на тестове, написани с пакета Testify.

Testify поддържа версии на Go от 1.13. Можете да добавите пакета като зависимост от проекта с тази команда:

отивам вземете github.com/stretchr/testify

Ето един прост тест за твърдения с пакета Testify твърдят пакет:

пакет основен

импортиране (
"тестване"
"github.com/stretchr/testify/assert" // само заявяване на пакет
)

// името на функцията трябва да бъде "Нещо" по конвенция
функTestSomething(t *тестване. T) {
// утвърждаване на равенство
твърдят. Равно (t, 123, 123, "те трябва да са равни")

// потвърждаване на неравенство
твърдят. NotEqual (t, 123, 456, "не трябва да са равни")
}

The TestSomething тестовата функция приема структурата на типа тестване на тестване пакет като аргумент. The Равен и Не е равно методите са за твърдения, основани на равенство и неравенство, от Testify’s твърдят пакет.

Пакетът GoConvey

GoConvey е инструмент за тестване Go, подготвен за експресивност над тестване пакет. Включва терминал (CLI) и браузър (GUI) функционалност за тестване.

Пакетът GoConvey се интегрира с тестване пакет, предоставящ уеб потребителски интерфейс за работа с естествени Go тестове. Той също така включва функционалност за регресионни тестове, персонализирани изходи и генериране на тестов код. Можете да изпълнявате тестове автоматично, да имате достъп до формати на покритие в HTML и да персонализирате GUI.

Изпълнете тази команда в терминала на вашето работно пространство Go, за да инсталирате пакета Go Convey.

отивам вземете github.com/smartystreets/goconvey

Ето прост пример за писане на тестове с пакета GoConvey.

пакет основен

импортиране (
. "github.com/smartystreets/goconvey/convey"
"тестване"
)

функTestSomething(t *тестване. T) {
// Предавайте t само в повиквания от най-високо ниво
Convey("Деклариране на променлива", t, функ() {
x := 1

Convey("увеличаване на променлива", функ() {
x++

Convey("assert equality", функ() {
Така че (x, Трябва да е равно, 2)
})
})
})
}

Ще трябва да импортирате предавам пакет, използващ нотация с точки за теста.

Функцията Convey от Предайте Пакетът помага при определяне на обхвата на теста. Последният Предайте извикването на функция в примера за код потвърждава равенството между х променлива и 2, използвайки ShouldEqual функция.

Пакетът HTTP Expect

The HTTP Очаквайте package е лесен за използване, кратък, декларативен пакет за HTTP и REST API тестване от край до край на Go. Можете да го използвате, за да създавате HTTP заявки постепенно и да проверявате отговорите и техните полезни натоварвания рекурсивно.

The httpexpect пакетът е набор от верижни създатели за HTTP заявки и твърдения за HTTP отговори и полезни товари. Тя е изградена върху http, тестване, и други пакети. Пакетът работи добре и с вградения httptest пакет.

httpexpect предоставя функционалност за изграждане на заявка с URL конструкция, заглавки, бисквитки и полезни натоварвания. Той обработва твърдения за отговор, твърдения за полезен товар, красив печат и WebSockets.

Изпълнете тази команда в терминала на вашата работна директория, за да инсталирате httpexpect пакет.

отивам вземете github.com/gavv/httpexpect

Ето прост пример за тестване на манипулираща функция с httpexpect пакет.

пакет основен

импортиране (
"fmt"
"github.com/gavv/httpexpect/v2"
"net/http"
"net/http/httptest"
"тестване"
)

функexampleHandler()http.Манипулатор {
връщане http. HandlerFunc(функ(автор http. ResponseWriter, заявка *http. Заявка) {
fmt. Fprintln (автор, "Hello World")
})
}

функTestexampleHandler(t *тестване. T) {
// създаване на http. Манипулатор
манипулатор := exampleHandler()

// стартиране на сървър чрез httptest
сървър := httptest. NewServer (манипулатор)
отлагам сървър. Близо()

// създаване на екземпляр за очакване на http
очаквам := httpочаквам. Ново (t, сървър. URL адрес)

// работи ли?
очаквам. GET("/").
Очаквам().
Състояние (http. StatusOK).JSON().Array().Empty()
}

The exampleHandler функцията за обработка връща HTTP манипулатор за httpexpect пакет. The TestexampleHandler функция декларира екземпляр на функцията манипулатор. След това създава нов сървър за тестване на крайната точка с httptest пакет.

The очаквам променливата е твоя httpexpect случай, който удря ВЗЕМЕТЕ поискайте коренния път на крайната точка на сървъра. The Статус функцията се връща кода на състоянието (в такъв случай, 200), ако тестът е успешен.

Пишете изчерпателни и интуитивни тестове

Тестовете допринасят много за оценката на целостта на вашето приложение и има много модели и методи за тестване, които можете да използвате за вашите програми. В основата на вашия работен процес за тестване трябва да пишете интуитивни тестове, които можете да подобрявате, докато вашите програми се променят с времето.