Aktywne Wpisy
Jamniki2 +215
Ja #!$%@?, nie zapomnę jak wkręciłem jakiejś idiotce z tagu #narkotykizawszespoko że mam koks w Warszawie, typiara po 5 minutach gadki podała mi swoje dane, zdjęcia na maxmodels czy jakoś tak i chciała obciągnąc za grama xD masakra, dzieci nie ćpajcie. Nawet jej nie odpisywałem, a ona dalej sama się upokarzała. #heheszki #bestofmirko no i #warszawa stoilca xD
LeVentLeCri +1
Mówi się
- EMBAPE 52.9% (331)
- MBAPE 26.0% (163)
- inaczej 21.1% (132)
Ma ktoś pomysł jak przetestować wyrzucanie tego wyjątku?
AirborneStatus ma 2 pola, jedno jest stringiem a drugie booleanem, nie ma opcji żeby podać złe dane - o ile nie ma błędu w oprogramowaniu, wiadomość zawsze utworzy się dobra, a wtedy też dobrze się zaszyfruje do XMLa...
Chciałabym uniknąć używania PowerMocka (obie metody są statyczne, klasy Utils...), bo słyszałam że to świadczy o złym designie... W takim razie jak przeształcić ten kod żeby był dobry i testowalny?
Myślę nad tym i myślę i nie wiem jak to wymyślić ( ͡° ͜ʖ ͡°)
Komentarz usunięty przez autora
mógłbyś mi to wyjaśnić bardziej merytorycznie? ten kod w 85% składa się z mojego przerobionego + np new JAXBException()nie zrobię bo nie ma takiej metody. topicAirborneStatusto też nie jest metoda, spyto jak rozumiem to metoda z Mockito ale nie ma nawet nawiasów... to jakiś trolling?
Komentarz usunięty przez autora
1. statyczne wywołania metod na utilach zamykasz w metodach testowanej klasy, dzięki temu masz możliwość symulowania co te metody zwracają bez używania PowerMocka (pierwsze dwie metody w kodzie, który przysłałem)
2. w testach jednostkowch obiekt klasy, która posiada te metody robisz jako spy
3. określasz, że gdy na obiekcie stworzonym w punkcie 2 (w przykładzie nazwałem go spy) zostanie
Komentarz usunięty przez autora
1. głupio wyglądają te pierwsze dwie metody ;) ale może tak trzeba.
2. no właśnie tego mi brakowało - co to ten spy ;)
4. tego to już nie rozumiem. jakie powiadomienie i co masz na myśli przez .topicAirborneStatus(...)?
5. nie pisałam że nie ma żadnego tylko takiego bez parametrów
Gdzieś tam wyszperałam też i wymyśliłam że mogłabym te metody zrobić niestatyczne (w sumie to moja klasa), zamiast
@interface: bardzo descriptive nazwa, co to jest dupa? :P
nie czaję. gdzie te wartości będą podawane? O_o
LOG.warn("var1 value {}, var2 value {}", firstvariable, secondvariable)
Komentarz usunięty przez autora
4. a widzisz, zamieszałem. Żle popatrzyłem i byłem pewien, że topicAirborneStatus to metoda w klasie, którą testujesz, a w rzeczywistości to jest obiekt jakiejś innej klasy z metodą publish. W takim razie musisz zrobić mock'a dla topicAirborneStatus i na nim zrobić verify, składniowo podobnie do tego co wrzuciłem :)
Możesz tak zrobić, tylko wtedy żeby to było fajnie testowalne to musiałabyś instancję XmlHelper np. wrzucać jako argument do konsruktora
Komentarz usunięty przez autora
Twoim problemem jest ścisłe przywiązanie do obcego kodu (tight coupling).
Po pierwsze, komunikujesz się z zewnętrzną usługą statycznie – jest to wyraźne naruszenie zasady odwracania zależności (dependency inversion principle). Powinieneś dostawać obiekt tej usługi w konstruktorze – wtedy nie miałbyś problemu z jego podmianą (na inaczej skonfigurowany egzemplarz, np
@MacDada: mnóstwo razy to słyszałam, tylko nigdy nie wiem jak zrobić dobry dizajn ( ͡° ͜ʖ ͡°)
co to jest zewnętrzna usługa? XmlUtils to moja klasa.
a problem w ogóle nie dotyczy logera tylko samego wyrzucania wyjątku - nie wiem jak to zasymulować
@noelo_cohelo: https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) + czytaj wszystko od Wujka Boba
@noelo_cohelo: „Nie Twój kod” / kod z innej części appki, który chcesz odizolować / kod niższego poziomu.
@noelo_cohelo: No ale jeśli to usługa, to rób normalne metody i wstrzykuj, a nie jakieś
Myślałam o tym, wtedy wybuchnie na createFlightStatusMessage i też nie będzie to JAXBException.
No właśnie, tylko staticów nie zmockuję ;>
Co jeśli nie mogę tego zrobić? Obecnie system jest tak zbudowany że konstruktor jest dziedziczony.