Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Funktion hat der Go-Test?

Welche Funktion hat der Go-Test?

青灯夜游
青灯夜游Original
2023-02-01 16:55:334004Durchsuche

„go test“ ist ein Testbefehl, der zum Testen von in der Go-Sprache geschriebenen Programmen verwendet wird; dieser Test basiert auf Codepaketen. Der Befehl „go test“ liest automatisch die Quellcodedatei mit dem Namen „*_test.go“ im Quellcodeverzeichnis, die mehrere Testfunktionen enthält. Die Testfunktion hat im Allgemeinen das Namenspräfix „Test“ und den Typ „testing“. T-Funktion mit Parametern deklariert.

Welche Funktion hat der Go-Test?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.

Go-Sprache verfügt über eine Reihe von Unit-Test- und Leistungstestsystemen, mit denen ein Teil des erforderlichen Codes schnell getestet werden kann, wobei nur eine kleine Menge Code hinzugefügt werden muss.

Der Befehl go test liest automatisch die Datei mit dem Namen *_test.go im Quellcodeverzeichnis, generiert die ausführbare Datei und führt sie zum Testen aus.

go test-Befehl (Testbefehl)

go test-Befehl wird zum Testen von in der Go-Sprache geschriebenen Programmen verwendet. Diese Art von Tests basiert auf Codepaketen. Dazu ist natürlich auch die Hilfe von Test-Quellcodedateien erforderlich. Im zweiten Abschnitt dieses Kapitels werden wir näher darauf eingehen, wie man Go-Programmtestcode schreibt und schreibt. Hier besprechen wir nur, wie man Befehle zum Starten von Tests verwendet. go test命令用于对Go语言编写的程序进行测试。这种测试是以代码包为单位的。当然,这还需要测试源码文件的帮助。关于怎样编写并写好Go程序测试代码,我们会在本章的第二节加以详述。在这里,我们只讨论怎样使用命令启动测试。

go test命令会自动测试每一个指定的代码包。当然,前提是指定的代码包中存在测试源码文件。测试源码文件是名称以“_test.go”为后缀的、内含若干测试函数的源码文件。测试函数一般是以“Test”为名称前缀并有一个类型为“testing.T”的参数声明的函数.

现在,我们来测试goc2p项目中的几个代码包。在使用go test命令时指定代码包的方式与其他命令无异——使用代码包导入路径。如果需要测试多个代码包,则需要在它们的导入路径之间加入空格以示分隔。示例如下:

hc@ubt:~$ go test basic cnet/ctcp pkgtool
ok      basic    0.012s
ok      cnet/ctcp    2.014s
ok      pkgtool    0.014s

go test命令在执行完所有的代码包中的测试文件之后,会以代码包为单位打印出测试概要信息。在上面的示例中,对应三个代码包的三行信息的第一列都是“ok”。这说明它们都通过了测试。每行的第三列显示运行相应测试所用的时间,以秒为单位。我们还可以在代码包目录下运行不加任何参数的运行go test命令。其作用和结果与上面的示例是一样的。

另外,我们还可以指定测试源码文件来进行测试。这样的话,go test命令只会执行指定文件中的测试,像这样:

    hc@ubt:~/golang/goc2p/src/pkgtool$ go test envir_test.go
# command-line-arguments
./envir_test.go:25: undefined: GetGoroot
./envir_test.go:40: undefined: GetAllGopath
./envir_test.go:81: undefined: GetSrcDirs
./envir_test.go:83: undefined: GetAllGopath
./envir_test.go:90: undefined: GetGoroot
FAIL    command-line-arguments [build failed]

我们看到,与指定源码文件进行编译或运行一样,命令程序会为指定的源码文件生成一个虚拟代码包——“command-line-arguments”。但是,测试并没有通过。但其原因并不是测试失败,而是编译失败。对于运行这次测试的命令程序来说,测试源码文件envir_test.go是属于代码包“command-line-arguments”的。并且,这个测试源码文件中使用了库源码文件envir.go中的函数。但是,它却没有显示导入这个库源码文件所属的代码包。这显然会引起编译错误。如果想解决这个问题,我们还需要在执行命令时加入这个测试源码文件所测试的那个源码文件。示例如下:

hc@ubt:~/golang/goc2p/src/pkgtool$ go test envir_test.go envir.go
ok      command-line-arguments    0.010s

现在,我们故意使代码包pkgtool中的某个测试失败。现在我们再来运行测试:

hc@ubt:~$ go test basic cnet/ctcp pkgtool
ok      basic   0.010s
ok      cnet/ctcp       2.015s
--- FAIL: TestGetSrcDirs (0.00 seconds)
        envir_test.go:85: Error: The src dir '/usr/local/go/src/pkg' is incorrect.
FAIL
FAIL    pkgtool 0.009s

我们通过以上示例中的概要信息获知,测试源码文件中envir_test.go的测试函数TestGetSrcDirs

Der Befehl go test testet automatisch jedes angegebene Codepaket. Voraussetzung ist natürlich, dass die Testquellcodedatei im angegebenen Codepaket vorhanden ist. Bei der Testquellcodedatei handelt es sich um eine Quellcodedatei mit dem Suffix „_test.go“, die mehrere Testfunktionen enthält. Eine Testfunktion ist im Allgemeinen eine Funktion, deren Name das Präfix „Test“ hat und die eine Parameterdeklaration vom Typ „testing.T“ hat.

Jetzt testen wir mehrere Codepakete im goc2p-Projekt. Die Angabe von Codepaketen bei Verwendung des Befehls go test erfolgt auf die gleiche Weise wie bei anderen Befehlen – mithilfe des Codepaket-Importpfads. Wenn Sie mehrere Codepakete testen müssen, müssen Sie Leerzeichen zwischen den Importpfaden einfügen, um sie zu trennen. Ein Beispiel ist wie folgt:

rrreeeDer Befehl go test druckt die Testzusammenfassungsinformationen in Einheiten von Codepaketen aus, nachdem alle Testdateien im Codepaket ausgeführt wurden. Im obigen Beispiel lautet die erste Spalte der drei Informationszeilen, die den drei Codepaketen entsprechen, „ok“. Das bedeutet, dass alle die Prüfung bestanden haben. Die dritte Spalte jeder Zeile zeigt die Zeit in Sekunden an, die für die Ausführung des entsprechenden Tests benötigt wurde. Wir können den Befehl go test auch ohne Parameter im Codepaketverzeichnis ausführen. Seine Funktion und Ergebnisse sind die gleichen wie im obigen Beispiel.

Darüber hinaus können wir auch die Testquellcodedatei zum Testen angeben. In diesem Fall führt der Befehl go test nur die Tests in der angegebenen Datei aus, wie folgt: 🎜rrreee🎜Wir sehen, dass das Befehlsprogramm genau wie die Angabe der Quellcodedatei zum Kompilieren oder Ausführen angibt kompiliert oder führt die angegebene Quellcodedatei aus. Generiert ein Dummy-Codepaket – „command-line-arguments“. Der Test wurde jedoch nicht bestanden. Der Grund dafür ist jedoch nicht, dass der Test fehlgeschlagen ist, sondern dass die Kompilierung fehlgeschlagen ist. Für das Befehlsprogramm, das diesen Test ausführt, gehört die Testquellcodedatei envir_test.go zum Codepaket „command-line-arguments“. Darüber hinaus nutzt diese Testquellcodedatei die Funktionen in der Bibliotheksquellcodedatei envir.go. Es wird jedoch nicht das Codepaket angezeigt, in das die Quellcodedatei dieser Bibliothek importiert wird. Dies führt offensichtlich zu Kompilierungsfehlern. Wenn wir dieses Problem lösen möchten, müssen wir beim Ausführen des Befehls auch die von dieser Testquellcodedatei getestete Quellcodedatei hinzufügen. Hier ist ein Beispiel: 🎜rrreee🎜Jetzt scheitern wir absichtlich an einem Test im Codepaket pkgtool. Jetzt führen wir den Test erneut aus: 🎜rrreee🎜Aus den zusammenfassenden Informationen im obigen Beispiel wissen wir, dass der Test in der Testfunktion TestGetSrcDirs von envir_test.go in der Testquelldatei fehlgeschlagen ist. In der Informationszeile, die den Namen der Testquelldatei enthält, die den Test nicht bestanden hat, ist die durch Doppelpunkte getrennte Zahl unmittelbar nach dem Namen der Testquelldatei die Zeilennummer, in der sich die Fehlermeldung befindet, und die durch Doppelpunkte getrennte Zahl nach der Zeile Nummer ist die Fehlermeldung. Der Inhalt dieser Fehlermeldung wurde vom Benutzer geschrieben. Darüber hinaus wird der letzten Zeile der zusammenfassenden Informationen „FAIL“ vorangestellt. Dies weist darauf hin, dass die Tests für das Codepaket pkgtool nicht bestanden werden. Die Fehlergründe sind in der vorherigen Meldung beschrieben. 🎜🎜Normalerweise legen wir die Testquellcodedatei und die zu testende Quellcodedatei im selben Codepaket ab. Darüber hinaus sind auch die in diesen Quellcodedateien deklarierten Paketnamen identisch. Darüber hinaus haben wir eine weitere Option: Der in der Testquellcodedatei deklarierte Paketname kann der Name des Pakets plus das Suffix „_test“ sein. Wir bezeichnen diese Art von Testquellcodedatei als Out-of-Package-Testquellcodedatei. Das Testen von Quellcodedateien außerhalb des Pakets hat jedoch einen Nachteil: Die privaten Programmentitäten auf Paketebene in der zu testenden Quellcodedatei können nicht in ihren Testfunktionen getestet werden, z. B. privaten Variablen, Funktionen usw. auf Paketebene. und Strukturtypen. Dies liegt daran, dass die Codepakete, zu denen die beiden gehören, unterschiedlich sind. Daher schreiben wir im Allgemeinen selten Testquellcodedateien außerhalb des Pakets. 🎜🎜🎜Über Tags🎜🎜

Der Tag-Verarbeitungsteil des Befehls go test ist so umfangreich und kompliziert, dass Go-Sprachentwickler diesen Teil der Logik aus dem Hauptteil des Befehls go test verschieben müssen Programm Trennen und erstellen Sie separate Quellcodedateien. Da der Befehl go test eine Kompilierungsaktion enthält, kann er alle für den Befehl go build verfügbaren Tags akzeptieren. Darüber hinaus weist es viele einzigartige Markierungen auf. Diese Tags werden verwendet, um die Aktionen des Befehls selbst zu steuern, einige werden verwendet, um den Testprozess und die Testumgebung zu steuern und einzurichten, und einige werden verwendet, um detailliertere Testergebnisse und statistische Informationen zu generieren. go test命令的标记处理部分是庞大且繁杂的,以至于使Go语言的开发者们不得不把这一部分的逻辑从go test命令程序主体中分离出来并建立单独的源码文件。因为go test命令中包含了编译动作,所以它可以接受可用于go build命令的所有标记。另外,它还有很多特有的标记。这些标记的用于控制命令本身的动作,有的用于控制和设置测试的过程和环境,还有的用于生成更详细的测试结果和统计信息。

可用于go test命令的几个比较常用的标记是-c-i-o。这两个就是用于控制go test命令本身的动作的标记。详见下表。

表0-6 go test命令的标记说明

标记名称 标记描述
-c 生成用于运行测试的可执行文件,但不执行它。这个可执行文件会被命名为“pkg.test”,其中的“pkg”即为被测试代码包的导入路径的最后一个元素的名称。
-i 安装/重新安装运行测试所需的依赖包,但不编译和运行测试代码。
-o 指定用于运行测试的可执行文件的名称。追加该标记不会影响测试代码的运行,除非同时追加了标记-c-i

上述这几个标记可以搭配使用。搭配使用的目的可以是让go test命令既安装依赖包又编译测试代码,但不运行测试。也就是说,让命令程序跑一遍运行测试之前的所有流程。这可以测试一下测试过程。注意,在加入-c

Einige der gebräuchlicheren Tags, die mit dem Befehl go test verwendet werden können, sind -c, -i und - o. Bei diesen beiden handelt es sich um Tags, mit denen die Aktionen des Befehls go test selbst gesteuert werden. Einzelheiten finden Sie in der Tabelle unten.

Tabelle 0-6 Markierungsbeschreibung des Befehls go test

Markierungsname Markierungsbeschreibung th>
-c Generiert eine ausführbare Datei zum Ausführen von Tests, führt sie jedoch nicht aus. Diese ausführbare Datei erhält den Namen „pkg.test“, wobei „pkg“ der Name des letzten Elements des Importpfads des zu testenden Codepakets ist.
-i Installieren/neuinstallieren Sie die zum Ausführen des Tests erforderlichen Abhängigkeitspakete, kompilieren und führen Sie den Testcode jedoch nicht aus.
-o Gibt den Namen der ausführbaren Datei an, die zum Ausführen des Tests verwendet wird. Das Anhängen dieses Tags hat keinen Einfluss auf die Ausführung des Testcodes, es sei denn, das Tag -c oder -i wird ebenfalls angehängt.
Die oben genannten Tags können zusammen verwendet werden. Der Zweck ihrer gemeinsamen Verwendung kann darin bestehen, dass der Befehl go test abhängige Pakete installiert und Testcode kompiliert, aber keine Tests ausführt. Mit anderen Worten: Lassen Sie das Befehlsprogramm alle Prozesse durchlaufen, bevor Sie den Test ausführen. Dies kann zum Testen des Testprozesses verwendet werden. Beachten Sie, dass das Befehlsprogramm nach dem Hinzufügen des Tags -c die ausführbare Datei, die zum Ausführen des Tests verwendet wird, im aktuellen Verzeichnis speichert. 【Verwandte Empfehlungen: 🎜Go-Video-Tutorial🎜, 🎜Programmierunterricht🎜】🎜

Das obige ist der detaillierte Inhalt vonWelche Funktion hat der Go-Test?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist Revive in Go?Nächster Artikel:Was ist Revive in Go?