Testování softwaru je proces, který vyhodnocuje metriky programů pomocí nástrojů, skriptů nebo ručně.

Testování je nedílnou součástí cyklu vývoje softwaru. Komplexní testování poskytuje podrobné informace o integritě vaší aplikace.

Chybám můžete předcházet a opravovat je psaním testů, hodnocením výkonu programu a automatizací pracovních postupů.

Začínáme s testováním v Go

Standardní knihovna Go poskytuje vyvíjející se testování balík. The testování balíček má benchmarking, fuzzing, přeskakování, dílčí testování, dílčí benchmarking a další funkce.

Testování s tímto balíčkem je snadné. Zde je jednoduchá testovací struktura, která bude sloužit jako model pro test:

typ Případy strukturovat {
// očekávaný výstup testu
očekávaný int

// výstup funkce
aktuální int

// hodnota, kterou předáváte funkci
argument tětiva
}

Zde je jednoduchá funkce, která převádí řetězce na celá čísla. Váš test tuto funkci otestuje.

import (
"strconv"
)

funcStringToInteger(str tětiva)int {
celé číslo, chyba := strconv. Atoi (str)

-li chyba!= nula {
vrátit se0
}

vrátit se celé číslo
}

instagram viewer

The StringToInteger funkce vrací 0 pokud je chyba při převodu a celé číslo, pokud nejsou žádné chyby.

Zde je testovací funkce pro StringToInteger:

funcTestStringToInteger(test *testování. T) {
expectInt := StringToInteger("3")

caseInstance := Cases {
očekáváno: expectInt,
aktuální: 3,
}

-li caseInstance.expected == caseInstance.actual {
// nějaký kód zde
} jiný {
test. Selhat()
}
}

The TestStringToInteger testovací funkce přijímá a testování. T objekt jako svůj argument. The očekávanýInt proměnná obsahuje výsledek konverze řetězce. The caseInstance proměnná je konkretizovaná struktura Cases pro test. The -li porovnává očekávané a skutečné hodnoty.

The Selhat metoda vrátí neúspěšný test v příkazu else, pokud se hodnoty nerovnají.

Go poskytuje a test příkaz pro automatizaci a získávání přehledů o vašich testech a programech.

jít test
jít pomoci otestovat

Stránka nápovědy poskytuje podrobné informace o tom, jak jít testovat funguje:

Ekosystém Go je domovem mnoha knihoven, díky nimž je testování přístupnější a flexibilnější. Kromě toho je spousta funkcí testování balíček včetně regresní a jednotkové testování.

Balíček Svědčit

Balíček Testify je jedním z nejpopulárnějších rámců Go pro testování balíčků. Poskytuje nástroje, které budete potřebovat k psaní účinných testů, se snadnými funkcemi asertace, zesměšňování a testování.

Testify je vhodný pro vývoj řízený testem, protože balíček poskytuje a falešný balík. To poskytuje mechanismus pro psaní falešných objektů, které můžete při testování použít místo skutečných objektů.

Balíček také poskytuje:

  • An tvrdit balíček, který poskytuje užitečné metody pro psaní přátelských a čitelných testů.
  • A vyžadovat balíček podobný jako tvrdit balíček pro vrácení booleovských výsledků.
  • A apartmá balíček pro testovací sady se strukturami.

Svědčit se rozšiřuje na testování balíček a můžete použít jít testovat příkaz ke spuštění testů napsaných pomocí balíčku Testify.

Testify podporuje verze Go od 1.13. Balíček můžete přidat jako závislost projektu pomocí tohoto příkazu:

jít získejte github.com/stretchr/testify

Zde je jednoduchý test tvrzení s balíčkem Testify tvrdit balík:

balík hlavní

import (
"testování"
"github.com/stretchr/testify/assert" // pouze balíček tvrdit
)

// název funkce by měl být podle konvence "Něco".
funcVyzkoušejte něco(t *testování. T) {
// prosazování rovnosti
tvrdit. rovná se (t, 123, 123, "měli by si být rovni")

// tvrzení o nerovnosti
tvrdit. NotEqual (t, 123, 456"neměli by si být rovni")
}

The Vyzkoušejte něco testovací funkce přebírá strukturu testovacího typu testování balíček jako argument. The Rovnat se a NotEqual metody jsou pro tvrzení založená na rovnosti a nerovnosti od Testify's tvrdit balík.

Balíček GoConvey

GoConvey je testovací nástroj Go připravený pro expresivitu testování balík. To zahrnuje terminál (CLI) a prohlížeč (GUI) testování funkčnosti.

Balíček GoConvey se integruje s testování balíček, poskytující webové uživatelské rozhraní pro práci s nativními Go testy. Zahrnuje také funkce pro regresní testy, přizpůsobitelné výstupy a generování testovacího kódu. Testy můžete spouštět automaticky, přistupovat k formátům pokrytí v HTML a přizpůsobovat GUI.

Spusťte tento příkaz v terminálu vašeho pracovního prostoru Go a nainstalujte balíček Go Convey.

jít získejte github.com/smartystreets/goconvey

Zde je jednoduchý příklad psaní testů s balíčkem GoConvey.

balík hlavní

import (
. "github.com/smartystreets/goconvey/convey"
"testování"
)

funcVyzkoušejte něco(t *testování. T) {
// Pouze předejte t do volání Convey nejvyšší úrovně
Convey("Deklarovat proměnnou", t, func() {
x := 1

Convey("proměnná zvýšení", func() {
x++

Convey("tvrdit rovnost", func() {
Takže (x, Mělo by se rovnat, 2)
})
})
})
}

Budete muset importovat sdělit balíček pomocí tečkové notace pro test.

Funkce Convey z Sdělit balíček pomáhá s rozsahem testu. Poslední Sdělit volání funkce v příkladu kódu prosazuje rovnost mezi X variabilní a 2, za použití Mělo by se rovnat funkce.

Balíček HTTP Expect

The HTTP očekávat package je snadno použitelný, stručný, deklarativní balíček pro end-to-end testování HTTP a REST API od Go. Můžete jej použít k postupnému vytváření požadavků HTTP a rekurzivní kontrole odpovědí a jejich dat.

The httpexpect package je sada zřetězitelných tvůrců pro HTTP požadavky a aserce na HTTP odpovědích a nákladech. Je postaven na http, testovánía další balíčky. Balíček také dobře funguje s vestavěným httptest balík.

httpexpect poskytuje funkce pro vytváření požadavků s konstrukcí URL, záhlavími, soubory cookie a datovými částmi. Zvládá požadavky na odezvu, tvrzení o užitečné zátěži, pěkný tisk a WebSockets.

Spusťte tento příkaz v terminálu vašeho pracovního adresáře a nainstalujte httpexpect balík.

jít získejte github.com/gavv/httpexpect

Zde je jednoduchý příklad testování funkce handleru pomocí httpexpect balík.

balík hlavní

import (
"fmt"
"github.com/gavv/httpexpect/v2"
"net/http"
"net/http/httptest"
"testování"
)

funcexampleHandler()http.Psovod {
vrátit se http. HandlerFunc(func(spisovatel http. ResponseWriter, požadavek *http. Žádost) {
fmt. Fprintln (spisovatel, "Ahoj světe")
})
}

funcTestexampleHandler(t *testování. T) {
// vytvořit http. Psovod
handler := exampleHandler()

// spusťte server pomocí httptest
server := httptest. NewServer (obslužný program)
odložit server. Zavřít()

// vytvořit http očekávanou instanci
očekávat := httpexpect. Nové (t, server. URL)

// funguje to?
očekávat. DOSTAT("/").
Očekávat().
Stav (http. StatusOK).JSON().Array().Empty()
}

The exampleHandler funkce handler vrací obsluhu HTTP pro httpexpect balík. The TestexampleHandler function deklaruje instanci funkce handleru. Poté vytvoří nový server pro testování koncového bodu pomocí httptest balík.

The očekávat proměnná je vaše httpexpect instance, která zasáhne DOSTAT požadovat kořenovou cestu koncového bodu na serveru. The Postavení funkce vrací stavový kód (v tomto případě, 200), pokud je test úspěšný.

Napište komplexní a intuitivní testy

Testy jdou dlouhou cestou při hodnocení integrity vaší aplikace a existuje mnoho testovacích vzorů a metod, které můžete pro své programy použít. V jádru vašeho pracovního postupu testování byste měli psát intuitivní testy, které můžete vylepšovat, jak se vaše programy v průběhu času mění.