Herausforderung:
Go 1.18 führt Generika ein, aber wie können Sie Generika effektiv in der Tabelle testen? Funktionen, wenn Instanziierung für T-Werte nicht möglich ist?
Problem Aussage:
Aktuelle Testmethoden erfordern eine Neudeklaration der Testlogik für jede Funktion, da T-Werte nicht instanziiert werden können.
Ansatz:
Der Testansatz sollte sich auf die Wiederverwendung gemeinsamer Logik konzentrieren und gleichzeitig die Besonderheiten des Generikums berücksichtigen Funktionen.
Lösung:
1. Wiederverwendbare Testlogik:
Erstellen Sie eine generische Testfunktion wie runTestCase[T Item](tc testCase[T]), die allgemeine Vorgänge wie das Einrichten von Tests und das Überprüfen von Ergebnissen kapselt.
2. Überlegungen zur Instanziierung:
Generische Funktionen müssen schließlich mit bestimmten Typen instanziiert werden. Es ist jedoch nicht notwendig, jeden möglichen Typparameter zu testen.
3. Konzentrieren Sie sich auf typspezifisches Verhalten:
Konzentrieren Sie sich nur dann auf das Testen von Funktionen für bestimmte Typen, wenn sich deren Verhalten aufgrund der Operatorsemantik unterscheidet. Zum Beispiel der Operator für Zahlen und Zeichenfolgen oder Vergleichsoperatoren für Zahlen und Zeichenfolgen.
Beispiel:
Dieser Testcode verwendet die generische runTestCase-Funktion, um verschiedene Typen zu testen von Werten in einer Filialkarte:
func TestStore(t *testing.T) { t.Run("ints", testInt) t.Run("strings", testString) } func testString(t *testing.T) { t.Parallel() tests := []testCase[string]{ { start: store[string]{}, key: 123, val: "test", expected: store[string]{123: "test"}, }, // ... } for _, tc := range tests { t.Run(tc.name, runTestCase(tc)) } } func testInt(t *testing.T) { t.Parallel() tests := []testCase[int]{ { start: store[int]{}, key: 123, val: 456, expected: store[int]{123: 456}, }, // ... } for _, tc := range tests { t.Run(tc.name, runTestCase(tc)) } }
Das obige ist der detaillierte Inhalt vonWie können wir generische Funktionen effektiv in Go testen, ohne Typparameter zu instanziieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!