Qual è la differenza traEasyMock isa vs ANYOBJECT
EasyMock.isA(String.class)
e
EasyMock.anyObject(String.class)
(o qualsiasi altra classe in dotazione)
In quali situazioni sarebbe usereste uno sopra l'altro?
Qual è la differenza traEasyMock isa vs ANYOBJECT
EasyMock.isA(String.class)
e
EasyMock.anyObject(String.class)
(o qualsiasi altra classe in dotazione)
In quali situazioni sarebbe usereste uno sopra l'altro?
La differenza è nel controllo di null. IsA restituisce false quando null ma anyObject restituisce true anche per null.
import static org.easymock.EasyMock.*;
import org.easymock.EasyMock;
import org.testng.annotations.Test;
public class Tests {
private IInterface createMock(boolean useIsA) {
IInterface testInstance = createStrictMock(IInterface.class);
testInstance.testMethod(
useIsA ? isA(String.class) : anyObject(String.class)
);
expectLastCall();
replay(testInstance);
return testInstance;
}
private void runTest(boolean isACall, boolean isNull) throws Exception {
IInterface testInstance = createMock(isACall);
testInstance.testMethod(isNull ? null : "");
verify(testInstance);
}
@Test
public void testIsAWithString() throws Exception {
runTest(true, false);
}
@Test
public void testIsAWithNull() throws Exception {
runTest(true, true);
}
@Test
public void testAnyObjectWithString() throws Exception {
runTest(false, true);
}
@Test
public void testAnyObjectWithNull() throws Exception {
runTest(false, false);
}
interface IInterface {
void testMethod(String parameter);
}
}
Nell'esempio il testIsAWithNull dovrebbe fallire.
mi sono davvero confuso con la documentazione EasyMock come EasyMock.isA() nella documentazione API è detto per restituire un oggetto di classe su cui viene chiamato, ma la documentazione EasyMock (per ISA (Classe Clazz)) dice che
Corrisponde se il valore effettivo è un'istanza della classe data o se si trova nell'istanza di una classe che estende o implementa la classe data. Null restituisce sempre false. Disponibile per oggetti.
per ANYOBJECT() si dice
Partite qualsiasi valore.
Si può avere uno sguardo a documentazione qui
alcuna differenza specifica menzionato tra questi due metodi.
L'ho guardato ma non mi è ancora chiaro. Significa che anyObject() corrisponde solo a un'istanza di quella classe e isA() corrisponderà a un'istanza di tale classe e qualsiasi sottoclasse? – emilyk
provato, anyObject() funziona anche per sottoclassi! – Vihar
Quindi non c'è differenza? – emilyk
Penso che i tuoi metodi runTest siano stati riportati indietro nel codice, ma ottengo quello che stai dicendo! Grazie! – emilyk