Úvod do testování v Go

testování je nesmírně důležité ve všech software. Být schopen zajistit správnost kódu a zajistit, aby jakékoli změny, které provedete, neskončily ničením něčeho jiného v různých částech vaší kódové základny, je nesmírně důležité.

Tím, že čas dostatečně vyzkoušet své programy go si nechte rozvinout rychleji, s větší pocit jistoty, že to, co jste developingwill pokračovat v práci po uvolnění do výroby.

cíle

na konci tohoto tutoriálu budete mít dobrý přehled o testování základních funkcí a metod v Go pomocí standardního balíčku "testing".

Budete mít zkušenosti psací stůl-řízený testy a budete také vidět, jak generovat více podrobný výstup z vyšetření pomocí různých flagsavailable.

Výukové video

tento výukový program lze nalézt ve formátu videa, pokud dáváte přednost:

Úvod

v tomto tutoriálu se podíváme na to, jak můžete vyvíjet a spouštět testy pro váš go kód pomocí příkazu go test.

Testovací Soubory

Pokud jste viděli jít projektů dříve, možná jste si všimli, že většina, pokud notall soubory v rámci projektu, funkce FILE_test.go protějšek ve stejném adresáři.

toto není nehoda. Jedná se o soubory, které obsahují všechny jednotky testsfor projektu a testují všechny kódu v rámci svých protějšků.

Struktura Projektu, Například
myproject/- calc.go- calc_test.go- main.go- main_test.go

Jednoduchý Test Souboru

Představte si, že jsme měli velmi jednoduché jít program, který byl vyroben z jednoho souboru andfeatured calculate() funkce. Tato funkce calculate() jednoduše vezme 1číslo a přidá k němu 2. Pěkné a jednoduché, aby nás nahoru a běží:

hlavní.jít

pokud bychom to chtěli otestovat, mohli bychom vytvořit soubor main_test.go ve stejné továrně a napsat následující test:

main_test.jít
package mainimport ( "testing")func TestCalculate(t *testing.T) { if Calculate(2) != 4 { t.Error("Expected 2 + 2 to equal 4") }}

Běží Naše Testy

Teď, když jsme vytvořili náš první test, je čas běžet, a uvidíme, jestli ourcode se chová tak, jak očekáváme. Můžeme spustit naše testy spuštěním:

$ go test

To by pak výstupní něco podobná následující:

$ test
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s

Tabulka Řízený Testování

Teď, že jsme rádi, že jeden výpočet funguje, bychom se měli podívat na improveconfidence tím, že přidá několik dalších testovacích případů do našeho kódu. Chceme – li vytvořit řadu testovacích případů, které jsou vždy testovány, můžeme si takto vytvořit array testů:

zde deklarujeme strukturu, která obsahuje jak vstupní, tak očekávanou hodnotu. Poté iterujte seznam testů pomocí našeho volání for _, test := range testsa zkontrolujte, zda naše funkce vždy vrátí očekávané výsledky bez ohledu na vstup.

když nyní spustíme testovací sadu, měli bychom vidět stejný výstup jako dříve:

$ test
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s

Podrobné Testovací Výstup

Někdy možná budete chtít vidět přesně to, co testy, které jsou spuštěny a jak dlouho se vzali. Naštěstí, to je k dispozici, pokud používáte -v vlajky, když běží yourtests tak jako:

$ test -v

můžete vidět, že obě naše normální test a náš stůl testu a prošel a tookless než 0.00s spustit.

kontrola pokrytí testem

pokrytí testem je metrika, kterou jsem občas viděl zneužívat společnostmi. Tyto společnosti si stanovily cíle pro všechny své systémy, jako například „kódová základna musí být alespoň 75% pokryta testy“.

ale tyto druhy cílů mohou vést ke špatnému chování a vývojovým týmům „hraní“ systému, aby se pokusili tyto cíle zasáhnout. Viděl jsem lidi v některých týmechstrávit dny psaní jednotkových testů, které testují základní gettery a settery v jazycích, jako je Java.

Testování je velmi důležité, ale musíte být pragmatický o tom, jak si otestovat yoursystems tak, že testy psát je poskytovat vám nejvíce hodnotu.

dny strávené písemné testy pokrytí nedůležité části své codebase by bylo lepší strávil psaní testovacích případů okolo kritické obchodní logiccaptured ve vašem systémů a na zajištění více okraje případy jsou pokryty.

Použití -krytí vlajky

S důležitou část z cesty, pojďme se podívat na to, jak si můžete ověřit thetest pokrytí vašeho systému pomocí go test příkaz:

Ve stejném adresáři jako vaše main.go a main_test.go soubory, spustit následující:

$ test -kryt
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.006s

uvidíte, že máte 66.7% celkové Go kód se vztahuje testcases.

vizualizace pokrytí

zatímco tato hodnota 66.7% nám může říci, kolik našeho kódu jsme testovali, neukazuje nám přesně, jaké cesty kódu máme nebo jsme netestovali.

Zde přicházejí go test a go tool cover, aby nám pomohli vyřešit tento konkrétní problém.

pomocí nástroje go test vygenerujeme coverprofile, který pak můžeme převést na vizualizaci HTML pomocí příkazu go tool cover:

$ go test-coverprofile=coverage.
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.008s

pak můžete využít této generované coverage.out soubor a použít jej k generatea HTML stránku, která ukazuje přesně to, co linie byly zahrnuty jako tak:

$ go tool cover -html=coverage.out

tím se otevře stránku v prohlížeči volby, které bude vypadat littlesomething, jako je tento:

Jak můžete vidět, většina kódu v rámci našeho Calculate funkce je testování afunkce Green pokrytí. Zatímco tiskové prohlášení ve vaší funkci main je Red , protože toto nebylo pokryto testy.

závěr

doufejme, že jste našli tento tutoriál užitečný! Pokud potřebujete další pomoc, neváhejte a dejte mi vědět v sekci komentářů níže.