Domanda

Ho un problema di test unitario in cui una classe ha una variabile statica che desidera caricare Spring Application Ctx.

Questa classe NON esce dalla Bean Factory e non posso cambiare questo fatto.

static ApplicationContext applicationContext = ...;

Funziona bene, ma è difficile JMock, o almeno non conosco il modo e finché posso lo Spring Ctx vuole avviarsi.Non è l'ideale per una situazione di test unitario.

C'è una soluzione che qualcuno conosce?Ho la possibilità di cambiare la variabile statica in qualsiasi cosa desideri..

Grazie.

È stato utile?

Soluzione

Ho risolto questo io stesso.

Era davvero semplice alla fine. Sovvenuto di avvolgere il mio statico in una classe che potrei quindi deridere.

public class ApplicationContextHolder implements ApplicationContextHoldable {

    protected static ApplicationContext applicationContext = ...;

    @Override
    public ApplicationContext getApplicationContext() {
        return ApplicationContextHolder.applicationContext;
    }

}

Altri suggerimenti

Bello. L'ironia è che l'unica cosa in cui la primavera è brava è gestire singoli, quindi non dovrebbe esserci il bisogno di variabili statiche :)

È possibile utilizzare le API JMock basate sulla riflessione per impostare campi privati/statici

    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;

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