2008-10-20 10 views
10

Mam w mojej kodzie statyczną metodę, którą chciałbym jakoś udawać.jmock szyderczy metodę statyczną

Używam jmock.

Jednym ze sposobów, w jaki mogę to zrobić, jest posiadanie "klasy opakowania" wokół metody statycznej i drwi to, ale miałem nadzieję na lepsze rozwiązanie.

Idę o tym w niewłaściwy sposób?

ZWROTNE:

miałem zamiar mieć interfejs i klasy, który miał właśnie metodę zwaną metodę statyczną. Pozwoliłoby mi kpić z logiki, kpiąc z połączenia z tą klasą owijki. (Czuję się brudna, nawet o tym rozmawiając :))

+0

Zobacz powiązane pytanie [Jak kpić z metod statycznych] (http://stackoverflow.com/questions/153048/how-to-mock-with-static-methods). – flicken

Odpowiedz

7

Nie obsługujemy drwiny z metod statycznych w jMock, ponieważ nie pasują one do naszego podejścia do projektowania. Wolimy nie używać metod statycznych do istotnych funkcji, które mogą wpływać na stan systemu. Zwykle używamy ich tylko w celu obsługi kodu OO i uczynienia go bardziej czytelnym. Dlatego widzimy wyśmiewanie statycznych metod jako wskazówkę, że jest problem. Jedynym wyjątkiem jest sytuacja, w której znajduje się ona w bibliotece innej firmy, ale prawdopodobnie zawijamy ją w coś bardziej zorientowanego na obiekt.

2

Powermock to rozszerzenie EasyMock, które pozwala na kpiny ze statycznych metod.

5

JMockit to kolejny zestaw narzędzi, który pozwala na kpiny z metod statycznych (jak i metod końcowych, konstruktorów itp.).

Nie widzę żadnego problemu z rozsądnym zastosowaniem metod statycznych podczas projektowania rozwiązania OO w przeciwnym razie.

Na przykład jeden wzór/idiom, którego lubię używać, to fasada statyczna , w szczególności w celu zapewnienia prostszego i łatwiejszego w użyciu interfejsu API do podsystemu trwałości w aplikacji biznesowej. Moim zdaniem, żadne inne rozwiązanie jest bardziej elegancki niż coś takiego:


    List<Person> peopleAboveAge = 
     find("select p from Person p where p.age >= ?", age); 

gdzie metoda find statycznie przywieziony z PersistenceFacade klasy, która określa jedynie metody statyczne, oraz obejmuje w jaki sposób uzyskać właściwą Session instancji/EntityManager. To rozwiązanie jest przyjazne i elastyczne w testowaniu urządzeń. Używałem go w aplikacji biznesowej, która miała ponad 500 trwałych elementów, używając Hibernate. Statyczna fasada pomogła nam po migracji z Hibernate 2 do Hibernate 3, po przejściu z Oracle do Sybase, a następnie z powrotem do Oracle, a kiedy zaczęliśmy używać adnotacji JPA zamiast plików "hbm.xml" do mapowania ORM.

Powiązane problemy