Aktywne Wpisy
sylwke3100 +3
Ile mieście lat jak pierwszy raz wyjechaliście choćby na jeden dzień za jakiekolwiek granicę?
Mireczki mam pytanie. (Nie będę ściemniał, że jestem tu z wami od dawana bo nigdy na oczy wykopu nie widziałem ) A sprawa jest taka. Uratowałem przed oddaniem na elektroniczny złom dwa garaże pełne...
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 wywołana metoda marschal() to ma zostać rzucony wyjątek
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),
@interface: bardzo descriptive nazwa, co to jest d--a? :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
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 w celach
@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
Myślałam o tym, wtedy wybuchnie na createFlightStatusMessage i też nie będzie to JAXBException.