Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Sie nicht exportierte Funktionen in Go testen?

Wie können Sie nicht exportierte Funktionen in Go testen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 05:47:02877Durchsuche

How Can You Test Unexported Functions in Go?

Testfunktionen aus Nicht-Test-Go-Dateien aufrufen

In Go sollten Testfunktionen nicht aus dem Code selbst heraus aufgerufen werden. Stattdessen sollen Unit-Tests mit dem go test ausgeführt werden. Befehl.

Black- und White-Box-Tests

Go unterstützt zwei Arten von Unit-Tests: Black-Box und White-Box.

Black-Box-Tests testet exportierte Funktionen von außerhalb des Pakets und simuliert, wie externe Pakete damit interagieren.

White-Box-Test testet nicht exportierte Funktionen innerhalb des Pakets selbst.

Beispiel

Betrachten Sie ein Paket namens example mit einer exportierten Funktion Sum und einer nicht exportierten Dienstprogrammfunktion add.

<code class="go">// example.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-Tests (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 sollten Unit-Tests mit dem Befehl go test ausgeführt werden und niemals direkt aus dem Code heraus aufgerufen. Black- und White-Box-Tests bieten zu Testzwecken unterschiedliche Zugriffsebenen auf die Implementierung des Pakets.

Das obige ist der detaillierte Inhalt vonWie können Sie nicht exportierte Funktionen in Go testen?. 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