Domanda

Ho un metodo statico nel mio codice che vorrei deridere in qualche modo.

Sto usando jmock.

Un modo in cui suppongo di poterlo fare è avere la "classe wrapper" intorno al metodo statico e deridilo ma speravo in una soluzione migliore.

Sto andando nel modo sbagliato?

Feedback:

Avrei avuto un'interfaccia e una classe che avevano un metodo che aveva appena chiamato il metodo statico. Mi permetterebbe di deridere la logica semplicemente deridendo la chiamata a questa classe wrapper. (Mi sento sporco anche a parlarne :))

È stato utile?

Soluzione

Non supportiamo i metodi statici beffardi in jMock perché non si adatta al nostro approccio alla progettazione. Preferiamo non utilizzare metodi statici per funzionalità significative che possono influire sullo stato del sistema. Tendiamo a usarli solo per supportare il codice OO e renderlo più leggibile. Ecco perché consideriamo beffardo i metodi statici come un suggerimento che c'è un problema. Un'eccezione è dove si trova in una libreria di terze parti, ma probabilmente lo avremmo avvolto in qualcosa di più orientato agli oggetti.

Altri suggerimenti

JMockit è un altro toolkit che consente di deridere metodi statici (nonché metodi finali, costruttori, ecc.).

Non vedo alcun problema con l'uso giudizioso di metodi statici durante la progettazione di una soluzione OO altrimenti.

Ad esempio, un modello / linguaggio che mi piace usare è la facciata statica , in particolare per fornire un'API più semplice e facile da usare al sottosistema di persistenza in un'applicazione aziendale. Secondo me, nessun'altra soluzione è più elegante di qualcosa come:


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

dove il metodo find viene importato staticamente da una classe PersistenceFacade che definisce solo metodi statici e incapsula come ottenere l'istanza Session / EntityManager corretta. Questa soluzione è semplice e flessibile per i test unitari. L'ho usato in un'applicazione aziendale con oltre 500 entità persistenti, utilizzando Hibernate. La facciata statica ci ha aiutato quando abbiamo migrato da Hibernate 2 a Hibernate 3, quando siamo migrati da Oracle a Sybase e poi di nuovo a Oracle, e quando abbiamo iniziato a utilizzare le annotazioni JPA anziché "hbm.xml". file per il mapping ORM.

Powermock è un'estensione di EasyMock che consente di prendere in giro metodi statici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top