Czy testy jednostkowe powinny być jak najbardziej jednostkowe? Przykładowo mam dwie funkcje:
string to_string(int number);
string add_strings(string str_1, string str_2); /// dodanie dwóch stringów jak liczb I teraz pytanie jakbyście napisali test jednostkowy dla funkcji add_strings i dlaczego? Opcja 2 testuje dodatkowo funkcję to_string, ale z drugiej strony nie bez powodu jest to test JEDNOSTKOWY.
@Gerax9: Sam sobie Pan odpowiedział. To test jednostkowy, tak długo, jak ma Pan zdolność testowania jak najmniejszego wycinka rzeczywistości, wspomnianej jednostki - to wtedy just do it. Pozdrawiam.
@Gerax9: Często się robi AAA czyli arrange/act/assert. W arragne szykujesz dane/środowisko testowe, w act masz one linera w którym wywołujesz testowany kod, a potem w assercjach sprawdzasz czy dostałeś oczekiwany rezultat. Jeżeli masz skomplikowanany lub powtarzalny arrange/assert, to faktycznie mogą się przydać helpery, ale tutaj masz stałe stringi i "helpery" nie pomagają a jedynie zaciemniają. Dodatkowo helpery same mogą zawierać buga.
@Gerax9: według mnie test z opcji 2 nie bardzo pasuje w tej konkretnej implementacji. Gdyby funkcja add_strings() przyjmowała inty i sama wołała wewnątrz to_string() to wtedy taki test faktycznie byłby przydatny. W tym momencie jeśli to_string() rzuci błędem, to nie będzie to powiązane z metodą add_strings(). Jeśli stawiasz na super clean code, to warto te testy rozdzielić. Zależy czy uczysz się najlepszych praktyk, czy po prostu zastanawiasz się jak to
Przykładowo mam dwie funkcje:
string to_string(int number);
string add_strings(string str_1, string str_2); /// dodanie dwóch stringów jak liczb
I teraz pytanie jakbyście napisali test jednostkowy dla funkcji
add_strings
i dlaczego?Opcja 2 testuje dodatkowo funkcję
to_string
, ale z drugiej strony nie bez powodu jest to test JEDNOSTKOWY.opcja 1:
TEST(add_strings_test)
{
str_1 = "jeden"
str_2 = "dwa"
EXPECT_EQUAL(add_strings(str_1, str_2), "trzy")
}
opcja 2:
TEST(add_strings_test)
{
str_1 = to_string(1)
str_2 = to_string(2)
EXPECT_EQUAL(add_strings(str_1, str_2), "trzy")
}
#programowanie #programista15k
Pozdrawiam.
// Arrange
string str_1 = "jeden"
string str_2 = "dwa"
Gdyby funkcja
add_strings()
przyjmowała inty i sama wołała wewnątrzto_string()
to wtedy taki test faktycznie byłby przydatny.W tym momencie jeśli
to_string()
rzuci błędem, to nie będzie to powiązane z metodąadd_strings()
.Jeśli stawiasz na super clean code, to warto te testy rozdzielić. Zależy czy uczysz się najlepszych praktyk, czy po prostu zastanawiasz się jak to