Wpis z mikrobloga

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.

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
  • 4
@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.

// Arrange
string str_1 = "jeden"
string str_2 = "dwa"
@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