Heim  >  Artikel  >  Backend-Entwicklung  >  Ein Artikel zum Verständnis von Unit-Tests in GO (Unit-Tests)

Ein Artikel zum Verständnis von Unit-Tests in GO (Unit-Tests)

藏色散人
藏色散人nach vorne
2022-11-01 17:25:173348Durchsuche

Einheitentests beziehen sich auf die Inspektion und Verifizierung der kleinsten testbaren Einheit in der Software

Eine Einheit ist das kleinste künstlich spezifizierte Funktionsmodul, das getestet werden soll

Im Allgemeinen sollte seine spezifische Bedeutung basierend auf der tatsächlichen Situation bestimmt werden. Beispielsweise bezieht sich eine Einheit in der C-Sprache auf eine Funktion, und eine Einheit in Go ist auch eine Testaktivität auf der niedrigsten Ebene, die im Softwareentwicklungsprozess ausgeführt wird. Die unabhängige Einheit wird von der Software isoliert Andere Teile des Programms zum Testen.

Unit-Tests, wir nennen es normalerweise Unit-Tests. Bei der Entwicklung müssen wir auch einige Demos schreiben, um Funktionen oder bestimmte kleine Funktionen in unseren Projekten zu testen
Der Komponententest in der GO-Sprache verwendet die Standardbibliothek testing

hat die folgenden einfachen Regeln:

  • Importieren Sie die Teststandardbibliothek
  • Einzelne Testdatei Name, gefolgt von _test
  • Der Funktionsname in der einzelnen Testdatei beginnt mit Test und die Parameter müssen t *testing.T

Einfaches Beispiel:

Schreiben Sie ein einfaches Beispiel, fügen Sie Suffix und Präfix hinzu
.├── cal.go
├── cal_test.go
├── lll
└── sub.go
cal.go

package mainfunc Addprefix(str string) string {

    return "hello_"+str}func Addsuffix(str string) string {

    return str+"_good"}
testing

有如下简单规则:

  • 导入 test 标准库
  • 单测文件名,后面跟上_test
  • 单测文件中的函数名为 Test开头,且参数必须是 t *testing.T

简单例子:

写一个简单的例子,添加后缀和前缀

package mainimport "testing"func TestAddprefix(t *testing.T) {
        Addprefix("xiaomotong")}func TestAddsuffix(t *testing.T) {
        Addsuffix("xiaomotong")}

cal.go

package mainfunc MyAdd(a int, b int) int  {

    if a+b > 10{
        return 10
    }

    return a+b}func MySub(one int, two int) int{

    if one - two <p><strong>cal_test.go</strong></p><pre class="brush:php;toolbar:false">package mainimport "testing"import "fmt"func TestMyAdd(t *testing.T) {
    num := MyAdd(4 ,9)
    fmt.Println(num)

    num = MyAdd(4 ,2)
    fmt.Println(num)}

sub.go

go test -v

sub_test.go

=== RUN   TestAddprefix
--- PASS: TestAddprefix (0.00s)=== RUN   TestAddsuffix
--- PASS: TestAddsuffix (0.00s)=== RUN   TestMyAdd
10
6
--- PASS: TestMyAdd (0.00s)PASS
ok      my_new_first/golang_study/later_learning/gotest 0.002s

执行单元测试

=== RUN   TestMyAdd
10
6
--- PASS: TestMyAdd (0.00s)PASS
ok      my_new_first/golang_study/later_learning/gotest 0.002s
  • -v

-v 是参数会显示每个用例的测试结果,显示执行的单测函数,是否通过以及单测的时候

运行结果如下

package mainimport "testing"import "fmt"func TestMyAdd(t *testing.T) {
    num := MyAdd(4 ,9)
    fmt.Println(num)

    num = MyAdd(4 ,2)
    fmt.Println(num)}func TestMySub(t *testing.T) {
        t.Run("one", func(t *testing.T) {
                if MySub(2, 3) != 1 {
                        t.Fatal("cal error")
                }

        })
        t.Run("two", func(t *testing.T) {
                if MySub(3, 1) != 2 {
                        t.Fatal(" error ")
                }
        })}

在包目录下执行 go test ,会执行包里面所有的单元测试文件

只运行指定的单测函数

咱们可以这样用:

go test -run TestMyAdd -v

结果如下:

=== RUN   TestMySub=== RUN   TestMySub/one
--- PASS: TestMySub (0.00s)
    --- PASS: TestMySub/one (0.00s)PASS
ok      my_new_first/golang_study/later_learning/gotest 0.003s

子测试

就是在我们写的单测函数中,调用 testing 包里的 Run 方法,跑子测试

咱们改造一下上述的 sub_test.go

rrreee

单独调用子测试函数,执行 go test -run TestMySub/one -v

rrreee

生成报告,计算覆盖率

  • 生成覆盖率报告文件

go test -v -covermode=count -coverprofile=cover.out

  • 使用 go tool 转成 html 格式

go tool cover -html=cover.out -o cover.htmlcal_test .go

rrreee

sub.go

rrreee

sub_test.goEin Artikel zum Verständnis von Unit-Tests in GO (Unit-Tests)rrreee

Komponententests ausführen

rrreee

  • -v
-v ist ein Parameter, der die Testergebnisse jedes Anwendungsfalls anzeigt, die ausgeführte einzelne Testfunktion anzeigt, ob sie bestanden wurde und wann der einzelne Test durchgeführt wurde

Die laufenden Ergebnisse sind wie folgt

rrreeeEin Artikel zum Verständnis von Unit-Tests in GO (Unit-Tests)Durch die Ausführung von go test im Paketverzeichnis werden alle Komponententestdateien im Paket ausgeführt

Führen Sie nur die angegebene einzelne Testfunktion aus🎜Wir können verwenden Es sieht so aus:🎜🎜go test -run TestMyAdd -v🎜🎜Die Ergebnisse sind wie folgt:🎜rrreee🎜🎜🎜sub-test🎜🎜 ist der Aufruf der Run-Methode im Testpaket im einzelne Testfunktion, die wir geschrieben haben, um den Untertest auszuführen🎜🎜us Ändern Sie das obige sub_test.go🎜rrreee🎜, um die Untertestfunktion separat aufzurufen, führen Sie go test -run TestMySub/one - v🎜rrreee🎜🎜🎜 um einen Bericht zu erstellen und die Abdeckungsrate zu berechnen🎜
  • Abdeckungsberichtsdatei erstellen
🎜go test -v -covermode=count - coverprofile=cover.out🎜
  • Verwenden Sie das Go-Tool zum Konvertieren in das HTML-Format
🎜go-Tool cover -html=cover.out -o cover.html 🎜🎜Öffnen Sie die HTML-Datei im Browser und Sie können sie anzeigen. Der folgende Bericht🎜🎜🎜🎜🎜Der grüne Teil im Bild ist abgedeckt, der rote Teil ist nicht abgedeckt, unser Beispiel hat alle spezifischen Funktionen abgedeckt Funktionen🎜🎜Für die Anweisungen nach dem Go-Test können wir uns auch das Hilfedokument ansehen🎜🎜🎜Viele Unternehmen haben begonnen, die Leistung zu verbessern, und CI/CD muss schnell implementiert werden Führen Sie eine Freigabe mit einem Klick und ein Rollback mit einem Klick durch. Ich beneide diese Orte mit perfekter Infrastruktur, hahaha~🎜

Das obige ist der detaillierte Inhalt vonEin Artikel zum Verständnis von Unit-Tests in GO (Unit-Tests). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen