Ho un oggetto che sto prendendo in giro con un JMockit NonStrictExcpection()
nel metodo @Before
/setUp()
della mia classe di test in modo che restituisca il valore previsto per la normale esecuzione della mia classe sottoposta a test.Rimozione di aspettative precedentemente definite in JMockit
Questo va bene per tutti i miei metodi di prova, salvo per un singolo test in cui voglio testare il funzionamento non normale di questo codice.
Ho provato a creare una nuova aspettativa nel metodo di test, che ritenevo avrebbe annullato l'aspettativa nel metodo setUp, ma ho trovato che l'aspettativa nel metodo setUp sta sopprimendo la nuova aspettativa.
Quando rimuovo l'aspettativa di setUp, il metodo di test si comporta come previsto (ma tutti i miei altri test falliscono, naturalmente).
Come dovrei codificare la mia classe di test in modo da poter avere le aspettative correttamente definite per ogni test con la quantità minima di codice? (So che potrei copiare/incollare il codice di aspettativa in ogni metodo di prova, ma non voglio farlo se del tutto evitabile).
Il mio codice di prova simile a questa (nota, questo è psuedocodarlo sorta e non viene compilato, ma si ottiene l'idea):
public class TestClass{
@Before
public void setUp(){
// Here I define the normal behaviour of mockObject
new NonStrictExpectations() {{
mockObject.doSomething();
result = "Everyting is OK!";
}};
// Other set up stuff...
}
// Other Tests...
/**
* This method tests that an error when calling
* mockObject.doSomething() is handled correctly.
*/
@Test(expected=Exception.class)
public void testMockObjectThrowsException(){
// This Expectation is apparently ignored...
new NonStrictExpectations() {{
mockObject.doSomething();
result = "Something is wrong!";
}};
// Rest of test method...
}
}
Non sarebbe questo significa che è necessario richiamare manualmente expectTheUnknown() su ogni singolo metodo di prova? Inoltre, penso che restituire 'NonStrictExpectations' non sia davvero necessario. –
@IbrahimArief È passato un po 'di tempo da quando ho scritto la risposta, ma AFAIR, il punto della domanda OP era che era necessario un controllo più dettagliato di quando veniva chiamato il metodo. Non credo che ci sia alcun dubbio sul fatto che questa soluzione sia un trucco, ma almeno funziona :) – Steen
Oh funziona magnificamente, non ci sono dubbi. :) Stavo solo confermando la mia preoccupazione che non sembra esserci altro modo se non quello di diffondere la definizione expectTheUnknown() su ciascun metodo in Jmockit piuttosto che avere una sorta di aspettativa speciale che scavalca un caso più generale. –