Vector z testami jednostkowymi w gtest

0

Napisałem własny vector bez kilku funkcjonalności, mógłby ktoś rzucić okiem na testy?
Nigdy wcześniej nie pisałem testów i nie mam pojęcia czy zrobiłem je na akceptowalnym poziomie. Dodam, że testy jednostkowe rozumiem jako sprawdzenie czy dana funkcja spełnia założenia, test niekoniecznie musi sprawdzać każdy przypadek, czy taka definicja jest poprawna?
Pytanie dodatkowe - czym zajmują się testerzy, piszą testy, które sprawdzają, czy program nie wywala się tylko dużo dokładniej, niż testy jednostkowe, czy robią dokładnie to samo co programista?

link do githuba: https://github.com/speedAde/Vector

1
for (size_t i = 0; i < tab.size(); ++i)
		vec[i] == temp[i];

Tutaj nie masz asercji w tej pętli, więc te wartości mogą być różne a test i tak przejdzie. Powinno tam być np. ASSERT_EQ(vec[i], temp[i]). Co do testerów to pewnie jest różnie, ale generalnie testerzy raczej nie testują funkcji bezpośrednio w unit testach. testerzy raczej traktują dany większy element kodu jako black box i wtedy weryfikują odpowiedzi danego modułu oprogramowania na różne dane wejściowe(albo kombinacje takich danych jeżeli dane są wprowadzane w jakiś sekwencjach), wtedy działanie tych funkcji też jest pośrednio testowane. Innym poziomem testowania może być np. testowanie już zintegrowanego produktu i konkretnych use case'ów, wtedy weryfikujesz czy aplikacja działa zgodnie z wymaganiami, są testy typu robustness kiedy np. piszesz skrypt który "szarpie" daną aplikacją(np. szybko wykonuje jakieś długie sekwencje możliwych do wykonania akcji), w zależności od specyfiki branży można też wykonywać testy badające jakieś 'performance indicatory' pod danymi obciążeniami czy podczas działania aplikacji na danych konfiguracjach sprzętu itd. itp. Testowanie to szeroka dziedzina, przeważnie bardziej wymagająca wiedzy domenowej niż czysto programistycznej.Takie unit testy badające tylko to zwraca dana funkcja to tylko malutki wycinek tematu unit testów, bardziej zaawansowane jest testowanie z użyciem mocków, gdzie sprawdzasz czy twoja funkcja spowoduje że jakieś obiekty zawołają swoje metody, możesz w takich testach wymusić że te metody coś zwrócą i wtedy aplikacja skieruje się w jakiś swój branch gdzie znowu jakiś inny obiekt coś wywoła itd.

2

Gdyby naklepanie vectora było takie banalne to nie byłby on częścią STL :)
Bez testów można powiedzieć, że:

  • brakuje const w metodach, które de facto są const
  • wybiórczo stosujesz noexcept (które na dodatek może być warunkowe w zależności od T)
  • pomijasz właściwości T (typu std::is_trivially_copyable, etc.)
  • reserve jest błędne, bo zamiast wyłącznie alokować pamięć odpala również konstruktory
  • shrink_to_fit jest WTF
  • brak chociażby basic exception guarantee dla operator=

Nie wiem jaki jest w tym przypadku sens pisania testów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1