2012-12-03 12 views
5

ho tali codici Java:come per deridere un metodo in un oggetto quando testare un metodo nello stesso oggetto

public class A { 
    public int get() { 
     // many codes 
     String s = new String(); 
     //... 
     int n = 5; 
     return isEmpty(s) ? n : -1; 
    } 
    public boolean isEmpty(String s) { 
     return s.isEmpty(); 
    } 
} 

ora voglio provare solo get(), non voglio mettere alla prova isEmpty() allo stesso modo, quindi voglio prendere in giro isEmpty(), basta testare un metodo, se richiama un altro metodo della classe, può easymock deridere il metodo?

+0

per deridere IsEmpty senza ottenere si sta andando ad avere per delegare la funzione di un'altra classe, e poi iniettare che in A. La speranza il vostro esempio mondo reale è meno banale di Questo.... –

risposta

3

Un approccio praticabile è quello di non finta A e fare qualcosa di simile

public class TestableA extends A 
{ 
    @Override 
    public boolean isEmpty(String s) 
    { 
     // "mock" impl goes here, eg.: 
     return s; 
    } 
} 

e scrivere il test di unità in termini di TestableA invece. È anche possibile creare questo in un metodo @Before:

public class UnitTest 
{ 
    private A a; // note: A, not TestableA! 

    @Before 
    public void setUp() 
    { 
     this.a = new A() 
     { 
      @Override 
      public boolean isEmpty(String s) 
      ... 
     } 
    } 

    @Test 
    ... 
} 
Problemi correlati