Heim  >  Artikel  >  Backend-Entwicklung  >  Können Sie eine Testfunktion von außerhalb einer Testdatei in Go aufrufen?

Können Sie eine Testfunktion von außerhalb einer Testdatei in Go aufrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 06:32:02973Durchsuche

Can You Call a Test Function from Outside a Test File in Go?

Können Sie eine Testfunktion von außerhalb einer Testdatei aufrufen?

In Go werden Komponententests normalerweise mit go test ausgeführt, das mit gekennzeichnete Testfunktionen identifiziert und ausführt der test.T-Parameter. Es stellt sich jedoch die Frage: Kann man eine Testfunktion aus einer Nicht-Testdatei aufrufen, um die Testausführung zu starten?

Die Antwort: Eine Framework-Einschränkung

Leider lautet die Antwort nein. Das Test-Framework von Go ist darauf ausgelegt, eine Trennung zwischen Test- und Nicht-Testcode zu erzwingen. Testfunktionen sollten nur aus Testdateien aufgerufen werden und die zu testenden Einheiten müssen aus dem entsprechenden Paket importiert werden.

Testmuster in Go

Go unterstützt zwei primäre Testmuster:

  • Black-Box-Test:Testet exportierte Funktionen von außerhalb des Pakets und simuliert, wie andere Pakete mit ihnen interagieren würden.
  • White-Box-Test: Testet nicht exportierte Funktionen innerhalb des Pakets und bietet Zugriff auf interne Implementierungsdetails.

In die Praxis umsetzen

Betrachten Sie ein Beispielpaket mit dem Namen „example“ mit einer Add-Utility-Funktion und einer exportierten Summe Funktion, die die interne Add-Funktion nutzt.

example.go: Paket mit exportierten und nicht exportierten Funktionen

<code class="go">package example

func Sum(nums ...int) int {
    sum := 0
    for _, num := range nums {
        sum = add(sum, num)
    }
    return sum
}

func add(a, b int) int {
    return a + b
}</code>

Black-Box-Testing in example_test.go

<code class="go">package example_test

import (
    "testing"

    "example"
)

func TestSum(t *testing.T) {
    tests := []struct {
        nums []int
        sum  int
    }{
        {nums: []int{1, 2, 3}, sum: 6},
        {nums: []int{2, 3, 4}, sum: 9},
    }

    for _, test := range tests {
        s := example.Sum(test.nums...)
        if s != test.sum {
            t.FailNow()
        }
    }
}</code>

White-Box-Tests in example_internal_test.go

<code class="go">package example

import "testing"

func TestAdd(t *testing.T) {
    tests := []struct {
        a   int
        b   int
        sum int
    }{
        {a: 1, b: 2, sum: 3},
        {a: 3, b: 4, sum: 7},
    }

    for _, test := range tests {
        s := add(test.a, test.b)
        if s != test.sum {
            t.FailNow()
        }
    }
}</code>

Zusammenfassend lässt sich sagen, dass das Aufrufen einer Testfunktion von außerhalb einer Testdatei aufgrund der geplanten Trennung zwischen Test- und Nicht-Testcode nicht möglich ist in Go. Unit-Tests sollten immer über den Befehl go test ausgeführt werden, um eine Trennung der Bedenken sicherzustellen und eine unbeabsichtigte Codeausführung zu verhindern.

Das obige ist der detaillierte Inhalt vonKönnen Sie eine Testfunktion von außerhalb einer Testdatei in Go aufrufen?. 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