Sto provando a testare una classe astratta e Mockito non inizializza le mie variabili membro. Ecco un semplice esempio per mostrarti il mio problema.Perché Mockito salta l'inizializzazione della variabile membro della mia classe astratta
Questa è una classe astratta che inizializza il proprio 'campo' membro:
import java.util.ArrayList;
import java.util.Collection;
public abstract class Foo {
private final Collection field = new ArrayList();
protected Foo() {
System.out.println("In constructor");
}
public boolean isNull(Object o) {
field.add(o);
return o == null;
}
abstract void someAbstractMethod();
}
Qui la classe di test:
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
public class FooTest {
@Test
public void testSomething() {
final Foo foo = Mockito.mock(Foo.class);
Mockito.when(foo.isNull(Mockito.anyObject())).thenCallRealMethod();
Assert.assertFalse(foo.isNull("baaba"));
}
}
Quando il test viene eseguito getta un NPE perché il campo variabile' 'non è inizializzato!
Cosa sto sbagliando?
L'utilizzo di http://docs.mockito.googlecode.com/hg/org/mockito/stubbing/OngoingStubbing.html#thenCallRealMethod%28%29 non è consigliato. Cosa vuoi testare? Se è l'implementazione di alcuni metodi di Foo, quindi crea semplicemente una sottoclasse. Utilizzare Mockito, quando si desidera verificare il comportamento o le chiamate al metodo di stub. –
Come ho detto a [@ david-wallace] (http://stackoverflow.com/users/1081110/david-wallace), voglio testare la classe astratta. La mia intenzione di usare una simulazione era di prevenire errori di compilazione in caso di cambiamento della classe astratta o di una delle sue interfacce. – Pigelvy