2012-04-20 18 views
5

Ho due classi di test, MyFirstTest e MySecondTest. L'esecuzione di ciascuno indipendentemente funziona bene. Quando eseguo entrambi (in eclissi seleziona la cartella di test che contiene questi file, fai clic con il pulsante destro del mouse, esegui come junit), MySecondTest fallisce perché MyClass è ancora mocked quando esegue i suoi 'test'. MyFirstTest richiede che MyClass venga deriso. MySecondTest richiede che MyClass non venga deriso. Pensavo che i tearDownMocks supponessero di "sdrammatizzare" le classi.MyClass rimane beffato tra due test

public class MyFirstTest { 
    @Before 
    public void setUp() throws Exception { 
     Mockit.setUpMocks(MockMyClass.class); 
    } 
    @After 
    public void tearDown() throws Exception { 
     Mockit.tearDownMocks(MockMyClass.class); 
    } 
    @AfterClass 
    public static void tearDownAfterClass() throws Exception { 
     Mockit.tearDownMocks(MockMyClass.class); 
    } 
    @MockClass(realClass = MyClass.class, stubs = "<clinit>") 
    public static class MockMyClass { 
... 


public class MySecondTest { 
+1

'Bene ho trovato che aggiungendo Mockit.tearDownMocks(); al metodo setUp delle classi MySecondTest (che è annotato con Before), reimposta i mock in modo che non utilizzi il mock della classe precedente. Non sono sicuro del motivo per cui le invocazioni di Mockit.tearDownMocks (MockMyClass.class) all'interno dei metodi annotati con After e AfterClass sono in calo ... ' – user1346730

risposta

3

Il metodo Mockit.tearDownMocks() accetta classi reali e non le prende in giro. Quindi, il codice giusto sarebbe:

Mockit.tearDownMocks(MyClass.class); 
+2

Questa funzione è obsoleta. Ora devi chiamare '.tearDown' nella classe di simulazione. Inoltre, in JUnit questo dovrebbe essere fatto tra i test automaticamente – keaplogik

1

Il modo giusto per farlo è come menzionato di seguito: Mock la classe e assegnarlo a una variabile. E poi, usando quella variabile, puoi distruggere o cancellare la simulazione in modo che non abbia impatto su nessun altro caso di test.

MockUp<PmRequestData> mockpmreq = new MockUp<PmRequestData>() { 
     @Mock 
     public Map<String, KPIData> getKpiDataMap() { 
      return datamap; 
      } 
     }; 
mockpmreq.tearDown(); 
Problemi correlati