Ú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ů.
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ěží:
pokud bychom to chtěli otestovat, mohli bychom vytvořit soubor main_test.go
ve stejné továrně a napsat následující test:
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í:
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 tests
a 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:
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:
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í:
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
:
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.