2010-03-21 11 views
19

Avvio di un nuovo progetto utilizzando EJB 3/JPA, principalmente bean di sessione senza stato e processi batch. In passato ho usato JUnit su webapp Java standard e sembrava funzionare abbastanza bene. In EJB2 il test delle unità era un problema e richiedeva un contenitore funzionante come JBoss per effettuare le chiamate. Ora che lavoreremo su EJB3/JPA, vorrei sapere quali sono le aziende che utilizzano per scrivere ed eseguire questi test. Junit e JMock sono ancora considerati rilevanti o ci sono altri quadri più recenti che sono stati oggetto di indagine?Miglior quadro corrente per test di unità EJB3/JPA

risposta

10

IMHO, sì sono ancora rilevanti.

Con EJB3, è possibile testare l'EJB come POJO normale o come bean gestito utilizzando un contenitore EJB incorporato.

Uguale per JPA, è possibile incorporare un'implementazione JPA per il test e utilizzare un database in memoria, oppure è possibile simulare completamente il livello dati.

Per il mio ultimo progetto EJB avevo scritto un po 'di glue code per testare l'EJB container EJB perché incorporato non sono stati sufficientemente matura, ma ora vorrei andare per un contenitore EJB incorporato + JUnit.

alcune risorse

Ma ci sono molti altri facilmente trovabili

3

Si può andare per Apache OpenEJB che è un implementazione EJB3.0 leggera che può essere incorporata in TestNG.

Here è possibile trovare codice di esempio che utilizza OpenEJB, TestNG e jMockIt per il test dell'unità.

8

Per Unit Testing, è possibile utilizzare JUnit, TestNG e il vostro quadro preferito beffardo (EasyMock, Mockito, PowerMock, JMockit, JMock).

Per test di integrazione, si potrebbe avviare/fermare un contenitore embeddable (JBoss, OpenEJB, GlassFish v3) dai test. Oppure, dare un'occhiata a Arquillian, un recentissimo nuovo giocatore per il test di integrazione di applicazioni Java EE:

La missione del progetto Arquillian è quello di fornire un semplice test harness che gli sviluppatori possono utilizzare per la produzione di una vasta gamma di test di integrazione per le loro applicazioni Java (molto probabilmente applicazioni aziendali). Un test case può essere eseguito all'interno del contenitore, implementato insieme al codice sotto test o coordinato con il contenitore, in qualità di client per il codice distribuito.

Per evitare l'inutile complessità nell'ambiente di sviluppo dello sviluppatore, Arquillian si integra in modo trasparente con framework di test familiari (ad esempio JUnit 4, TestNG 5), consentendo di eseguire test utilizzando plug-in di test IDE, Ant e Maven esistenti senza alcun componente aggiuntivo .

Controllare anche Improving the Testability of Java EE With Arquillian 1.0.0 Alpha 1 Released e lo spazio Arquillan. Sembra interessante IMO.

1

Un'opzione è anche l'utilizzo di Spring, ma ovviamente l'architettura sarà basata anche su Spring in fase di esecuzione. La ragione per cui mi piace primavera è che è facile da iniettare quali dati mai finto e gli oggetti sono necessari in fase di collaudo, come si può annotare nel caso di test JUnit che file di contesto da utilizzare:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:test-context.xml"}) 
public class MyClassTest { 

    @Autowired 
    private MyClass myClass; 

    @Test 
    public void testMyMethod() {....} 

Ma se don Voglio comunque usare Spring, quindi questo è abbastanza irrilevante :) D'altra parte, è molto facile passare da Spring in poi.

1

Suggerirei Arquillian. Con Arquillian avete le opzioni per testare normali EJB o bean CDI. È possibile eseguire nuovamente il test su un contenitore EE integrato, gestito o remoto. Il progetto Arquillian è continuamente aggiornato ...

Tuttavia non è sempre così facile eseguire il primo test arquilliano. Potresti avere problemi nel trovare le dipendenze per la versione arquilliana e la versione del contenitore corrette. Ho pubblicato un tutorial seriale su questo. Ma per non farmi sospettare di promuovere, il link non è pubblicato qui. Se ti piace, puoi semplicemente google "Tutorial EJB3 Test di integrazione con Arquillian part1".