2014-12-16 15 views
12

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?

risposta

17

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.

+0

Penso che i tuoi metodi runTest siano stati riportati indietro nel codice, ma ottengo quello che stai dicendo! Grazie! – emilyk

3

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.

+0

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

+0

provato, anyObject() funziona anche per sottoclassi! – Vihar

+0

Quindi non c'è differenza? – emilyk

Problemi correlati