Mir ist aufgefallen, dass der von Go empfohlene tabellengesteuerte Test auch in C geschrieben werden kann.
Tabellengesteuerter Test wird für Go-Tests empfohlen. Das Paar aus Dateneingabe und erwartetem Wert, das dem Testziel gegeben wird, wird als ein Testfall behandelt, und die Liste des erwarteten Werts und des gemessenen Werts wird in der Tabelle angezeigt.
Wenn Sie beispielsweise einen Test für die Methode gcd ()
tabellengesteuert schreiben:
gcd_test.go
func TestGcd(t *testing.T) {
cases := []struct {
a, b int
z int
}{
{12, 8, 4},
{3, 7, 1},
}
for _, c := range cases {
if gcd(c.a, c.b) != c.z {
t.Errorf("expected gcd(%v,%v) == %v\n", c.a, c.b, c.z)
}
}
}
Go kann gleichzeitig Strukturdefinitionen und Variableninitialisierungen schreiben. Die Initialisierung von Testfällen ist mit der Strukturliteral-Syntax{}
einfach und typsicher. Der Code ist sehr einfach zu lesen, da Sie sich nur auf die Testdaten konzentrieren können.
Ich habe auch einen Test für "gcd ()" in C in tabellengesteuerten geschrieben. Auch in C können Strukturdeklaration und Variableninitialisierung gleichzeitig durchgeführt werden. Die Initialisierung kann mit der Strukturliteral-Syntax{}
typsicher sein.
gcd_test.c
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
int test_gcd() {
struct {
int a, b;
int z;
} cases[] = {
{12, 8, 4},
{3, 7, 1},
};
for (int i = 0; i < ARRAY_SIZE(cases); ++i) {
if (gcd(cases[i].a, cases[i].b) != cases[i].z) {
printf("expected gcd(%d,%d) == %d\n", cases[i].a, cases[i].b, cases[i].z);
}
}
}
Im Vergleich zu Go gab es keinen großen Unterschied in Bezug auf Beschreibung und Lesbarkeit, und ich konnte einen tabellengesteuerten Test in C-Sprache schreiben.
Go wird oft als einfaches C bezeichnet, aber es ist auch eine gute Idee, die Kultur von Go in C zu importieren.
Recommended Posts