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.

Foi útil?

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;

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