Pracuję z następującym systemem:
Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern
Niedawno mieliśmy problem polegający na tym, że zaktualizowałem używaną przeze mnie bibliotekę, co spowodowało między innymi zmianę znaczników czasu (zwracanych przez bibliotekę zewnętrzną long
) z milisekund po epoce na nanosekundy po epoce.
Problem:
Jeśli napiszę testy, które kpią z obiektów biblioteki innej firmy, mój test będzie błędny, jeśli popełniłem błąd co do obiektów biblioteki innej firmy. Na przykład nie zdawałem sobie sprawy, że znaczniki czasu zmieniły precyzję, co spowodowało potrzebę zmiany w teście jednostkowym, ponieważ moja próbka zwróciła nieprawidłowe dane. To nie jest błąd w bibliotece , stało się tak, ponieważ coś przeoczyłem w dokumentacji.
Problem polega na tym, że nie mogę mieć pewności co do danych zawartych w tych strukturach danych, ponieważ nie mogę wygenerować prawdziwych bez prawdziwego pliku danych. Obiekty te są duże i skomplikowane i zawierają wiele różnych danych. Dokumentacja biblioteki innej firmy jest słaba.
Pytanie:
Jak skonfigurować testy, aby przetestować to zachowanie? Nie jestem pewien, czy uda mi się rozwiązać ten problem w teście jednostkowym, ponieważ sam test może łatwo się pomylić. Dodatkowo zintegrowany system jest duży i skomplikowany i łatwo coś przeoczyć. Na przykład w powyższej sytuacji poprawnie wyregulowałem obsługę znaczników czasu w kilku miejscach, ale przeoczyłem jedno z nich. W moim teście integracyjnym system wydawał się robić przede wszystkim właściwe rzeczy, ale kiedy wdrożyłem go do produkcji (która ma dużo więcej danych), problem stał się oczywisty.
Obecnie nie mam procesu testów integracyjnych. Testowanie jest w gruncie rzeczy: staraj się utrzymać testy jednostkowe w dobrym stanie, dodaj więcej testów, gdy coś się psuje, a następnie wdróż na moim serwerze testowym i upewnij się, że wszystko wydaje się rozsądne, a następnie wdróż w produkcji. Ten problem ze znacznikiem czasu przeszedł testy jednostkowe, ponieważ symulacje zostały utworzone niepoprawnie, a następnie przeszedł test integracji, ponieważ nie spowodował żadnych natychmiastowych, oczywistych problemów. Nie mam działu kontroli jakości.
Timestamp
klasę (zawierający żadnej reprezentacji chcą) i zapewniają nazwanych metod ( .seconds()
, .milliseconds()
, .microseconds()
, .nanoseconds()
) i oczywiście nazwanych konstruktorów. Wtedy nie byłoby problemów.