


## Wie erreicht man eine vollständige Abdeckung bei Funktionstests: Überbrückung der Lücke zwischen Code und Ausführung?
Oct 25, 2024 pm 06:43 PMSo zeigen Sie die vollständige Abdeckung in Funktionstests an
Problem:
Funktionstests werden kompiliert ausgeführt Binärcode, der Raum für ungedeckte blinde Flecken lässt.
Code-Snippet:
<code class="go">package main import ( "fmt" "math/rand" "os" "time" ) var exitCode int func Test_main(t *testing.T) { go main() exitCode = <-exitCh } func TestMain(m *testing.M) { m.Run() // can exit because cover profile is already written os.Exit(exitCode) } func main() { rand.Seed(time.Now().UTC().UnixNano()) for { i := rand.Int() fmt.Println(i) if i%3 == 0 { os.Exit(0) } if i%2 == 0 { os.Exit(1) } time.Sleep(time.Second) } }</code>
Lösung:
1. Hauptfunktion mit Build-Tags ausschließen:
<code class="go">//+build !test package main func main() { os.Exit(doFunc()); }</code>
Build mit Tags:
go test -c -coverpkg=. -o example -tags test
2. Funktionalität in testbaren Code extrahieren:
Vermeiden Sie das Testen der Hauptfunktion, indem Sie Funktionalität in andere Klassen extrahieren. Verwenden Sie func TestMain, um die Codeausführung im Hauptthread zu steuern.
3. Verwenden Sie Mocking:
Erstellen Sie Mocks für Abhängigkeiten, um bestimmte Codepfade zu isolieren und die Testbarkeit zu verbessern.
4. Timeouts für die Abdeckung:
Fügen Sie dem Test ein Timeout hinzu, um dem Coverage-Tool Zeit zu geben, das Profil zu schreiben, bevor die Anwendung beendet wird.
Beispiel mit Timeouts:
<code class="go">func exit(code int) { exitCh <- code time.Sleep(1 * time.Second) // Allow time for coverage data to be written os.Exit(code) }</code>
Vorteile:
- Aufgedeckte blinde Flecken in der Funktionstestabdeckung
- Verbesserte Testbarkeit und Wartbarkeit des Produktionscodes
- Vertrauen in die Richtigkeit und Vollständigkeit der Deckungsberichte
Das obige ist der detaillierte Inhalt von## Wie erreicht man eine vollständige Abdeckung bei Funktionstests: Überbrückung der Lücke zwischen Code und Ausführung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?

Wie schreibe ich Dateien in Go Language bequem?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?
