2010-06-05 10 views

Odpowiedz

14

trzy wady:

  • Musisz użyć agenta Java zrobić instrumentacji kodu bajtowego.
  • Nie można użyć podpisanego pliku junit.jar dostarczonego wraz z Eclipse.
  • Musisz nauczyć się fałszywego API. (W przeciwieństwie do obiektu pośredniczącego):

Zawsze możesz porozmawiać o tym, czy dobrze jest sfałszować ostatnią klasę, taką jak JMockit. O ile nie jest to starszy kod, refaktoryzacja jest zwykle lepszą alternatywą.

Z IDE, takimi jak Eclipse, używam narzędzia do generowania skrótów w klasie testowej częściej niż szyderczo (JMockit, Mockito itp.) W ostatnim czasie. Zaletą takiego podejścia jest to, że jest bardzo prosty. Jest to szczególnie miłe, gdy masz zespół z wieloma programistami, a niektórzy z nich nie lubią testów i mają małą motywację do nauki szyderczych ram. Również implementacje kodu pośredniczącego nie mają ograniczeń ramowych!

Jeśli jesteś otwarty na stubbing jako alternatywy, należy sprawdzić blogu Robert C. Martin o wyśmianie i stubbing here i here

Else, wygląda bardzo dobrze! Chociaż mam tylko doświadczenie z JMockiem, EasyMockiem i podstawową wiedzą z JMockit.

+0

Tak, ja też zadaję sobie pytanie, jak daleko chcę iść z kpiną. Mój własny kod wykorzystuje Dependency Injection przez cały czas, więc szyderstwo nie jest tak naprawdę skomplikowanym zadaniem (chociaż nie zawsze używam interfejsów do wszystkiego ze względu na dodatkowy nakład pracy związanej z konserwacją i zwiększanie wydajności przy korzystaniu z GWTRPC). Kiedy mówisz, że używasz obsługi narzędzi do generowania kodu pośredniczącego w Eclipse - jakie narzędzia masz na myśli? –

+0

Tylko podstawowa obsługa Java w Eclipse. Na przykład, jeśli utworzysz klasę prywatną lub anonimową, która implementuje interfejs, który chcesz dopełnić, wówczas Eclipse może utworzyć implementację szkieletu. Kliknij po prostu + 1 po wybraniu klasy. – Espen

+0

Ah, ok - Myślałem, że jest jakieś narzędzie, które utrzymuje kodeks pośredni, kiedy kod się zmienia, czy coś. –

15

Niedawno przyjąłem projekt, który wykorzystuje JMockit i myślę, że jakość kodu z pewnością ucierpiała w wyniku zdolności biblioteki do wyłudzania statycznych i prywatnych metod.

Testy są bardzo kruche, ponieważ szczegóły wykonawcze zawarte w metodach prywatnych są testowane (więc jeśli zmienię jak klasa robi coś może przerwać testy, nawet jeśli co klasa nie zostało naruszone).

Kod jest także zaśmiecony wywołaniami metod statycznych - jeśli deweloperzy nie mieliby możliwości ich wyśmiewać, myślę, że dołożą więcej starań, aby odseparować sprawy nieco lepiej.

+0

Nie rozumiem tego komentarza. Mówisz, że testy stały się kruche po użyciu JMockit b/c szczegóły implementacji w prywatnych metodach zostały ** przetestowane **. Ale na pewno umiejętność wyśmiewania takich prywatnych metod powinna pomóc w złagodzeniu problemu poprzez ** drwiące ** te prywatne metody zamiast zaostrzać je ** testując ** prywatne metody? Czyż więc JMockit nie wyprowadził cię na korzyść, poprawiając twoje testy, niż bez niego? Po prostu ciekawy. – mystarrocks

+1

Myślę, że testy były kruchy, ponieważ jeśli ktoś refaktoryzuje klasę (np. Zmienia nazwę/łączy niektóre metody wewnętrzne, lub nawet całkowicie zmienia sposób działania klasy bez zmiany publicznego interfejsu API), to testy, które kręcą się wewnątrz klasy testowanie jego prywatnych metod mogłoby się zepsuć. Nie sądzę, aby test jednostkowy miał na względzie, w jaki sposób klasa wykonuje swoją pracę, powinna jedynie zwracać uwagę na to, czy praca jest wykonywana poprawnie, czy też nie. Czy to sprawia, że ​​jest jaśniejszy? – codebox

+0

Ah, tak, tak. Czułem się jak [this] (http://stackoverflow.com/a/11834082/934307) komentarz podziela ten sam sentyment jak twój. Twoje zdrowie! – mystarrocks

Powiązane problemy