Se siete in grado di refactoring del codice, è possibile avvolgere le chiamate ai metodi finali/statici in semplici metodi di istanza, ad esempio:
protected Foo doBar(String name) {
return Utility.doBar(name);
}
Questo consente di ignorare il metodo di involucro in unit test per restituire un'istanza simulata di Foo.
In alternativa è possibile utilizzare Powermock, che si estende EasyMock (e Mockito) per consentire beffardo di metodi finali e statiche:
PowerMock è un framework che si estendono altre librerie finte come EasyMock con funzionalità più potenti. PowerMock utilizza una manipolazione personalizzata del classloader e del codice byte per abilitare il mocking di metodi statici, costruttori, classi e metodi finali, metodi privati, rimozione di inizializzatori statici e altro.
Ecco un test example beffardo un ultimo metodo statico, l'esempio mostra come prendere in giro alcuni altri tipi troppo:
@Test
public void testMockStaticFinal() throws Exception {
mockStatic(StaticService.class);
String expected = "Hello altered World";
expect(StaticService.sayFinal("hello")).andReturn("Hello altered World");
replay(StaticService.class);
String actual = StaticService.sayFinal("hello");
verify(StaticService.class);
assertEquals("Expected and actual did not match", expected, actual);
// Singleton still be mocked by now.
try {
StaticService.sayFinal("world");
fail("Should throw AssertionError!");
} catch (AssertionError e) {
assertEquals("\n Unexpected method call sayFinal(\"world\"):",
e.getMessage());
}
}
fonte
2009-08-18 11:43:46
C'è qualche ragione per cui è necessario utilizzare un framework Mock? –
Sì, le chiamate al metodo utilizzano le proprietà JNDI per connettersi al database e JMS, non voglio implementare tutti i pezzi per il mio test. –
Sei in grado di rifattorizzare uno qualsiasi dei codici legacy per aiutarti? –