Como zombar de uma variável estática em java usando JMock
-
21-09-2019 - |
Pergunta
Eu tenho um problema de teste de unidade em que uma classe possui uma variável estática que deseja carregar o Spring Application Ctx.
Essa classe NÃO sai do Bean Factory e não posso mudar esse fato.
static ApplicationContext applicationContext = ...;
Isso funciona bem, mas é difícil de JMock, ou pelo menos não conheço um jeito e até que eu consiga o Spring Ctx quer inicializar.Não é ideal para uma situação de teste de unidade.
Existe uma solução alternativa que alguém conheça?Tenho a opção de alterar a variável estática para o que desejar.
Obrigado.
Solução
Resolvei isso eu mesmo.
Foi realmente simples no final. Justed precisa envolver minha estática em uma aula que eu poderia zombar.
public class ApplicationContextHolder implements ApplicationContextHoldable {
protected static ApplicationContext applicationContext = ...;
@Override
public ApplicationContext getApplicationContext() {
return ApplicationContextHolder.applicationContext;
}
}
Outras dicas
Legal.A ironia é que a única coisa em que o Spring é bom é gerenciar Singletons, então não deveria haver necessidade de variáveis estáticas :)
Você pode usar APIs JMock baseadas em reflexão para definir campos privados / estáticos
import static mockit.Deencapsulation.setField;
//Test method
public void testSample {
setField(Sample.class,"isPrivate",true);
setField(Sample.class,"isStatic",true);
}
private class Sample {
private boolean isPrivate = false;
private boolean isStatic = false;
}