Pergunta

Eu tenho um método estático no meu código que eu gostaria de alguma forma para zombar.

Eu estou usando jMock.

Uma maneira que eu acho que eu poderia fazer isso é ter "wrapper class" em torno do método estático e zombar isso, mas eu estava esperando por uma solução melhor.

Vou sobre este o caminho errado?

FEEDBACK:

Eu ia ter uma interface e classe que tinha um método que acabou de ligar o método estático. Isso permitiria que me para zombar a lógica por apenas zombando a chamada para esta classe wrapper. (Eu me sinto suja, mesmo falando sobre isso :))

Foi útil?

Solução

Não apoiamos zombando métodos estáticos em jMock porque ele não se encaixa a nossa abordagem de design. Nós preferimos não usar métodos estáticos para características importantes que podem afetar o estado do sistema. Nós tendem a usá-los apenas para apoiar o código OO e torná-lo mais legível. É por isso que vemos zombando de métodos estáticos como um indício de que há um problema. Uma exceção é onde ele está em uma biblioteca de terceiros, mas nós provavelmente dispor que em algo mais de qualquer maneira orientada a objetos.

Outras dicas

JMockit é um outro conjunto de ferramentas que permite zombando de métodos estáticos (bem como métodos finais, construtores, etc.).

Eu não vejo qualquer problema com o criteriosa uso de métodos estáticos ao projetar uma solução OO contrário.

Por exemplo, um padrão / idioma Eu gosto de usar é a estática fachada , sobretudo para fornecer um mais simples e mais fácil de usar API para o subsistema de persistência em um aplicativo de negócios. Na minha opinião, nenhuma outra solução é mais elegante do que algo como:


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

onde o método find estaticamente é importado de uma classe PersistenceFacade que define apenas métodos estáticos e encapsula como obter a instância Session / EntityManager adequada. Esta solução é a unidade de teste de amigável e flexível. Usei-o em um aplicativo de negócios que teve mais de 500 entidades persistentes, usando o Hibernate. A fachada estática ajudou quando migrou do Hibernate 2 a Hibernate 3, quando migraram da Oracle para Sybase e depois voltar para Oracle, e quando começamos a usar anotações JPA em vez de arquivos "hbm.xml" para o mapeamento ORM.

PowerMock é uma extensão para EasyMock que permite zombando de métodos estáticos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top