Sono nuovo anche per Mockito e PowerMockito. Ho scoperto che non posso testare metodi statici con Mockito puro, quindi ho bisogno di usare PowerMockito (giusto?).Per quale motivo dovrei prendere in giro?
ho molto semplice classe chiamata Convalida con questo metodo molto facile
public class Validate {
public final static void stateNotNull(
final Object object,
final String message) {
if (message == null) {
throw new IllegalArgumentException("Exception message is a null object!");
}
if (object == null) {
throw new IllegalStateException(message);
}
}
quindi ho bisogno di verificare che:
1) Quando chiamo quel metodo statico su questo argomento Messaggi null, IllegalArgumentException si chiama
2) Quando chiamo quel metodo statico su argomenti oggetto null, IllegalStateException si chiama
Da quello che ho ottenuto finora, ho scritto questo test:
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.isNull;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.testng.annotations.Test;
@RunWith(PowerMockRunner.class)
@PrepareForTest(Validate.class)
public class ValidateTestCase {
@Test(expectedExceptions = { IllegalStateException.class })
public void stateNotNullTest() throws Exception {
PowerMockito.mockStatic(Validate.class);
Validate mock = PowerMockito.mock(Validate.class);
PowerMockito.doThrow(new IllegalStateException())
.when(mock)
.stateNotNull(isNull(), anyString());
Validate.stateNotNull(null, null);
}
}
Quindi questo dice che mi prendo gioco di classe Convalida e sto verificando che quando finta viene chiamato su quel metodo con argomento null come un oggetto e qualsiasi stringa come messaggio, un IllegalStateException viene generata.
Ora, davvero non capisco. Perché non posso chiamare direttamente quel metodo, lasciando cadere l'intera magia voodoo che deride quella classe statica? A me sembra che, a meno che non chiami Validate.stateNotNull, il test passi comunque ... Per quale motivo dovrei prenderlo in giro?