2009-09-29 16 views
6

Sto cercando un modo per applicare TDD a Session Beans.Unit Testing EJB

qualcuno può fornire consigli e collegamenti su come testarli?

come utilizzare JUnit per farlo?

P.S: Sono nuovo per Test Driven Development e Session Beans.

Sto usando EJB v2.

risposta

8

Suppongo che tu stia parlando dei bean di sessione EJB2.x. Per questo tipo di animali, quello che mi piace fare è:

  • Utilizzare il Session Bean come wrapper che delega semplicemente la logica a un POJO che è possibile testare facilmente all'esterno di un contenitore. test al di fuori del contenitore è meglio, più veloce, più facile, ecc, ma non copre le cose come validazione descrittore di deployment - e/o -
  • usare qualcosa come Cactus per le prove in-contenitore (controllare la documentazione Howto EJB) - e/o -
  • Creare e distribuire il modulo EJB con Cargo per il test di integrazione.
+0

+1 - Per gli ultimi due suggerimenti, non ho pensato a Cactus in anni.:) –

+0

In realtà, non ho usato Cactus per anni :) –

+0

Ho provato a installare Cactus per l'uso, ma non lo capisco davvero! Mi sembra troppo difficile da configurare. Sto usando Eclipse e NetBeans. – Attilah

5

Non si dice quale versione di EJB si sta utilizzando. Se è EJB v3, controlla Ejb3Unit. Dal sito web:

Ejb3Unit è un'estensione JUnit e può eseguire automatizzato autonomo JUnit test per tutti EJB 3.0 conformarsi Java EE progetti. L'approccio di test del contenitore fuori porta a cicli di build-test brevi, perché non è più necessaria la distribuzione del contenitore .

Tuttavia, vorrei difendere la separazione delle funzionalità dalle specifiche del bean. Ciò consentirà di testare funzionalità complesse al di fuori del contenitore e senza utilizzare framework come quelli sopra. La maggior parte dei test verrebbero testati su POJO (semplici vecchi oggetti Java) e relativamente pochi si concentrerebbero sui test del framework di persistenza.

MODIFICA: Quindi se si utilizza EJB v2, ovviamente, si ignora il primo punto. Il secondo punto rimane valido, tuttavia.

2

Attualmente sto utilizzando apache openejb come contenitore incorporato per i test di unità. Sebbene si tratti di un progetto EJB3/JPA, dovrebbe funzionare allo stesso modo per EJB2. Per bootstrap il contenitore nei test è sufficiente creare un oggetto InitialContext che in seguito sarà possibile utilizzare per ricerca EJB e DataSources:

Properties props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory"); 

// a DataSource named "mysql" 
props.put("mysql", "new://Resource?type=DataSource"); 
props.put("mysql.JdbcDriver", "com.mysql.jdbc.Driver"); 
props.put("mysql.JdbcUrl", "jdbc:mysql://localhost:3306"); 
props.put("mysql.JtaManaged", "true"); 
props.put("mysql.DefaultAutoCommit", "false"); 
props.put("mysql.UserName", "root"); 
props.put("mysql.Password", "root"); 

Context context = new InitialContext(props); 
LocalInterface local = (LocalInterface)context.lookup(localInterfaceName + "BeanLocal"); 
DataSource ds = (DataSource)context.lookup("java:openejb/Resource/mysql"); 

Edit: C'è ancora un po 'di documentazione nella sezione 'Prove Tecniche' a http://openejb.apache.org/3.0/index.html.

+0

puoi fornirmi un link a un buon tutorial su questo? sembra promettente. – Attilah