Aktywne Wpisy
Moreso_pl +696
Zapraszamy na #rozdajo z Moreso.pl
Do wygrania jest paczka o wartości 85 zł, która składa się z:
1. masło orzechowe 1 kg
2. orzeszki w chrupiącej skorupce o smaku zielona cebulka 700g
3. mango suszone 500g
4. orzeszki ziemne chili&lime 1 kg
Zasady:
1. Zaplusuj ten wpis
2. Odpowiedz na pytanie:
Osoba z komentarzem o największej ilości plusów wygrywa. Ciekawi jesteśmy Waszej kreatywności ( ͡° ͜ʖ ͡°)
Dodatkowo
Do wygrania jest paczka o wartości 85 zł, która składa się z:
1. masło orzechowe 1 kg
2. orzeszki w chrupiącej skorupce o smaku zielona cebulka 700g
3. mango suszone 500g
4. orzeszki ziemne chili&lime 1 kg
Zasady:
1. Zaplusuj ten wpis
2. Odpowiedz na pytanie:
Osoba z komentarzem o największej ilości plusów wygrywa. Ciekawi jesteśmy Waszej kreatywności ( ͡° ͜ʖ ͡°)
Dodatkowo
1-1-1-1 +282
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.