Nella consueta beffarda con @Mock
e @InjectMocks
annotazioni, la classe in fase di test dovrebbe essere eseguito con @RunWith(MockitoJUnitRunner.class)
.@RunWith (PowerMockRunner.class) vs @RunWith (MockitoJUnitRunner.class)
@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {
@Mock
private TaskService mockTaskService;
@InjectMocks
private ReportServiceImpl service;
// Some tests
}
ma in qualche esempio io sto vedendo @RunWith(PowerMockRunner.class)
in uso:
@RunWith(PowerMockRunner.class)
public class Tests {
@Mock
private ISomething mockedSomething;
@Test
public void test1() {
// Is the value of mockedSomething here
}
@Test
public void test2() {
// Is a new value of mockedSomething here
}
}
qualcuno potrebbe farlo notare che cosa è la differenza e quando voglio usare uno piuttosto che un altro?
Che succede a questa crociata personale contro PowerMock !? Ora, capisco che * è * una libreria di derisione con determinati problemi, ma è stata creata (non da me, BTW - ne ho creata un'altra) nel tentativo di risolvere problemi reali che alla fine emergono quando si scrivono test sul mondo reale. Solo per darti una situazione perfettamente legittima del mondo reale in cui tale strumento è utile: prendere in giro il metodo statico 'FacesContext.getCurrentInstance()' in modo da poter verificare le chiamate previste con il metodo 'addMessage (...)'. Inoltre, altre affermazioni fatte qui sono di fatto sbagliate o molto discutibili. –
In base alla mia esperienza, i framework Power * Mocking non sono solo * un * framework di un insieme di framework equivalenti. Ai miei occhi, questo prodotto è più simile a quel tipo di medicina, che dovrebbe essere consumato solo in casi molto rari; e dopo un sacco di "briefing" da parte del medico. La cosa è: ho passato troppe ore cercando di risolvere i problemi relativi a PowerMocking; o ascoltando persone che hanno visto quei bizzarri problemi che occasionalmente incontri. E, cosa più importante: nel 95% dei casi, è stato semplicemente che le persone hanno creato un design cattivo e non verificabile. E invece di cambiarlo, si sono rivolti a PowerMock. – GhostCat
Sono d'accordo; gli sviluppatori non dovrebbero rivolgersi a una libreria di derisione per evitare di risolvere problemi di testabilità. Questo è vero tanto quanto la situazione in cui evitano il buon design OO o API per aggirare i limiti di una libreria di derisione. Per me, la migliore risposta a entrambe queste situazioni è di evitare del tutto di deridere, e andare per un test di * integrazione *; è quello che faccio io stesso. –