Raible's Wiki

Raible Designs
Wiki Home
News
Recent Changes

AppFuse

Homepage
  - Korean
  - Chinese
  - Italian
  - Japanese

QuickStart Guide
  - Chinese
  - French
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish
  - Japanese

User Guide
  - Korean
  - Chinese

Tutorials
  - Chinese
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish

FAQ
  - Korean

Latest Downloads

Other Applications

Struts Resume
Security Example
Struts Menu

Set your name in
UserPreferences


Referenced by
Articles
CreateManager_it
LeftMenu




JSPWiki v2.2.33

[RSS]


Hide Menu

CreateDAO_it


Difference between version 6 and version 5:

At line 172 changed 1 line.
Per iniziare, crea una classe {{PersonDaoTest.java}} nella directory {{test/dao/**/dao}}. Questa classe deve estendere [BaseDaoTestCase|http://raibledesigns.com/downloads/appfuse/api/org/appfuse/dao/BaseDaoTestCase.java.html], una sotto classe del [AbstractTransactionalDataSourceSpringContextTests|http://www.springframework.org/docs/api/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.html] di Spring che esiste già in questo package. Questa classe parent viene usata per caricare l'ApplicationContext di [Spring|http://www.springframework.org] (in quanto Spring collega i vari layer insieme), e per (opzionalmente) caricare un file .properties (ResourceBundle) con lo stesso nome della tua {{*Test.class}}. In questo esempio, se metti un file {{PersonDaoTest.properties}} nella stessa directory di {{PersonDaoTest.java}}, le properties in questo file saranno rese disponibili tramite la variabile "rb".
Per iniziare, crea una classe {{PersonDaoTest.java}} nella directory {{test/dao/**/dao}}. Questa classe deve estendere [BaseDaoTestCase|http://raibledesigns.com/downloads/appfuse/api/org/appfuse/dao/BaseDaoTestCase.java.html], una sotto classe del [AbstractTransactionalDataSourceSpringContextTests|http://www.springframework.org/docs/api/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.html] di Spring che esiste già in questo package. Questa classe parent viene usata per caricare l'ApplicationContext di [Spring|http://www.springframework.org] (in quanto Spring collega i vari layer insieme), e per (opzionalmente) caricare un file .properties (ResourceBundle) con lo stesso nome della tua {{*Test.class}}. In questo esempio, se metti un file {{PersonDaoTest.properties}} nella stessa directory di {{PersonDaoTest.java}}, le proprietà all'interno di questo file saranno rese disponibili tramite la variabile "rb".
At line 192 changed 1 line.
The code you see above is what you need for a basic Spring integration test that initializes and configures an implementation of PersonDao. Spring will use autowiring byType to call the ''setPersonDao()'' method and set the "personDao" bean as a dependency of this class.
Il codice che vedi qui sopra è tutto quello che ti server per un test di integrazione di base con Spring che inizializzi e configuri un'implementazione di PersonDao. Spring useraà l'autowiring byType per richiamare il metodo ''setPersonDao()'' ed impostare il bean "personDao" come dipendenza di questa classe.
At line 194 changed 1 line.
Now you need test that the CRUD (create, retrieve, update, delete) methods work in your DAO. To do this, create methods that begin with "test" (all lower case). As long as these methods are public, have a {{void}} return type and take no arguments, they will be called by the <junit> task in build.xml. Below are some simple tests for testing CRUD. An important thing to remember is that each method (also known as a test), should be autonomous. Add the following methods to your {{PersonDaoTest.java}} file:
Ora devi verificare che i metodi CRUD (create, retrieve, update, delete) funzionino nel tuo DAO. Per farlo crea dei metodi che inizino con "test" (tutto minuscolo). Se questi metodi sono pubblici, hanno un valore di ritorno {{void}} e non prendono argomenti, verranno richiamati dal task <junit> task nel build.xml. Qui sotto ci sono alcuni semplici test per verificare il CRUD. Una cosa importante da ricordare è che ogni metodo (noto anche come test), deve essere autonomo. Aggiungi i seguenti metodi al tuo file {{PersonDaoTest.java}}:
At line 251 changed 1 line.
;:%%(color: blue)''In the testGetPerson method, you're creating a person and then calling a get. I usually enter a record in the database that I can always rely on. Since [DBUnit|http://www.dbunit.org] is used to populate the database with test data before the tests are run, you can simply add the new table/record to the metadata/sql/sample-data.xml file:''%%
;:%%(color: blue)''Nel metodo testGetPerson, stai creando una persona, poi stai richiamando una get. Di solito io inserisco un record nel database sul quale posso sempre contare. Poiché viene usato [DBUnit|http://www.dbunit.org] per popolare il database con i dati di test prima che questi vengano eseguiti, puoi semplicemente aggiungere la nuova tabella/record al file metadata/sql/sample-data.xml:''%%
At line 268 changed 1 line.
;:%%(color: blue)''This way, you can eliminate the "create new" functionality in the testGetPerson method. If you'd rather add this record directly into the database (via SQL or a GUI), you can rebuild your {{sample-data.xml}} file using __ant db-export__ and then __cp {{db-export.xml metadata/sql/sample-data.xml}}__.''%%
;:%%(color: blue)''In questo modo, puoi eliminara la funzione "crea nuovo" nel metodo testGetPerson. Se preferisci piuttosto aggiungere questo record direttamente nel database (via SQL o una GUI), puoi ricostruire il tuo file {{sample-data.xml}} usando __ant db-export__ e poi __cp {{db-export.xml metadata/sql/sample-data.xml}}__.''%%
At line 270 changed 2 lines.
In the above example, you can see that person.set*(value) is being called to populate the Person object before saving it. This is easy in this example, but it could get quite cumbersome if you're persisting an object with 10 required fields (not-null="true"). This is why I created the ResourceBundle in the BaseDaoTestCase. Simply create a {{PersonDaoTest.properties}} file in the same directory as {{PersonDaoTest.java}} and define your property values inside it:
;:%%(color: blue)''I tend to just hard-code test values into Java code - but the .properties file is an option that works great for large objects.''%%
Nell'esempio qui sopra, puoi vedere che person.set*(value) viene chiamato per popolare l'oggetto Person prima di registrarlo. Questa cosa è semplice in questo esempio, ma può diventare parecchio complessa se stai rendendo persistente un oggetto con 10 campi obbligatori (not-null="true"). Questo è il motivo per cui ho creato il ResourceBundle nel BaseDaoTestCase. Crea semplicemente un file {{PersonDaoTest.properties}} nella stessa directory come {{PersonDaoTest.java}} e definisci i valori delle tue proprietà al suo interno:
;:%%(color: blue)''Io tendo a cablare i valori di test direttamente nel codice Java - ma il file .properties è un'opzione che funziona molto bene per oggetti grandi.''%%
At line 276 changed 1 line.
Then, rather than calling person.set* to populate your objects, you can use the BaseDaoTestCase.populate(java.lang.Object) method:
Poi, piuttosto che richiamare person.set* per popolare i tuoi oggetti, puoi usare il metodo BaseDaoTestCase.populate(java.lang.Object):
At line 284 changed 3 lines.
At this point, the PersonDaoTest class won't compile yet because there is no PersonDao.class in your classpath, you need to create it. PersonDao.java is an interface, and PersonDaoHibernate.java is the Hibernate implementation of that interface.
!!Create a new DAO to perform CRUD on the object [#4]
First off, create a PersonDao.java interface in the {{src/dao/**/dao}} directory and specify the basic CRUD methods for any implementation classes.
A questo punto, la classe PersonDaoTest non compila ancora perché non c'è nessuna PersonDao.class nel tuo classpath, devi crearla. PersonDao.java è un'interfaccia, e PersonDaoHibernate.java è l'implementazione Hibernate di tale interfaccia.
!!Crea un nuovo DAO per effettuare operazioni CRUD sull'oggetto[#4]
Prima di tutto, crea un'interfaccia PersonDao.java nella directory {{src/dao/**/dao}} e specifica i metodi CRUD basilari per tutte le classi di implementazione.

Back to CreateDAO_it, or to the Page History.