At line 167 changed 1 line. |
Agora iremos criar uma classe DaoTest para testar se nosso DAO funciona. Espere um minuto você diz, nós não criamos um DAO! Você está correto. No entanto, eu descobri que [Desenvolvimento dirigido por Testes|http://www.artima.com/intv/testdriven.html] produz softwares de alta qualidade. Por anos, pensei que __escrever seu teste antes de sua classe__ era tolice. Simplesmente parecia estúpido. Então eu tentei e descobri que funciona notavelmente. A única razão de fazer todo teste desenvolvimento dirigido por teste agora é porque descobri que ele rapidamente aumenta a velocidade do processo de desenvolvimento de software. |
Agora iremos criar uma classe DaoTest para testar se nosso DAO funciona. Espere um minuto você diz, nós não criamos um DAO! Você está correto. No entanto, eu descobri que [Desenvolvimento dirigido por Testes|http://www.artima.com/intv/testdriven.html] produz softwares de alta qualidade. Por anos, pensei que __escrever seu teste antes de sua classe__ era tolice. Simplesmente parecia estúpido. Então eu tentei e descobri que funciona notavelmente. A única razão de fazer todo este desenvolvimento dirigido por teste agora é porque descobri que ele rapidamente aumenta a velocidade do processo de desenvolvimento de software. |
At line 257 changed 1 line. |
;:%%(color: blue)''In the testGetPerson method, we'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 our database with test data before our tests are run, you can simply add the new table/record to the metadata/sql/sample-data.xml file:''%% |
;:%%(color: blue)''No método testGetPessoa, estamos criando uma pessoa e então chamado um get. Costumo inserir um registro no banco de dados que possa sempre confiar. Como [DBUnit|http://www.dbunit.org] é usado para popular nosso banco de dados com dados de teste antes da execução, você pode simplesmente adicionar uma nova table/record ao arquivo metadata/sql/sample-data.xml:''%% |
At line 274 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)''Desta forma, você pode eliminar a funcionalidade criar um novo no método testGetPessoa. Se você preferir adicionar este registro diretamente no banco de dados (via SQL ou GUI), você pode reconstruir seu arquivo sample-data.xml usando ant db-export e então cp db-export metadata/sql/sample-data.xml.''%% |
At line 276 changed 2 lines. |
In the above example, you can see that we're calling person.set*(value) to populate our object before saving it. This is easy in this example, but it could get quite cumbersome if we'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 the PersonDaoTest.java file and define your property values inside it: |
;:''I tend to just hard-code test values into Java code - but the .properties file is an option.'' |
No exemplo acima, você pode vê que estamos chamando pessoa.set*(valor) para popular nosso objeto antes de salvá-lo. Isto é fácil neste exemplo, mas poderia se tornar bastante incômodo se estivermos persistindo um objeto com 10 campos requeridos (not-null=true). Dai o porque da criação do ResourceBundle na classe BaseDaoTestCase. Simplesmente crie um arquivo PessoaDaoTest.properties no mesmo diretório que o arquivo PessoaDAOTest.java e defina o valor das propriedades dentro dele: |
;:''Tendo simplesmente a codificar valores de testes no código java mas o arquivo .properties é uma opção.'' |
At line 282 changed 1 line. |
Then, rather than calling person.set* to populate your objects, you can use the BaseDaoTestCase.populate(java.lang.Object) method: |
Então, ao invés de chamar pessoa.set* para popular seus objetos, você pode usar o método BaseDaoTestCase.populate(java.lang.Object): |
At line 290 changed 1 line. |
At this point, the PersonDaoTest class won't compile yet because there is no PersonDao.class in our classpath, we need to create it. PersonDAO.java is an interface, and PersonDAOHibernate.java is the Hibernate implementation of that interface. Let's go ahead and create those. |
Neste ponto, a classe PessoaDaoTest não irá compilar ainda porque não há PessoaDAO.class em nosso classpath, nós precisamos criá-la. PessoaDAO.java é uma Interface, e PessoaDAOHibernate é uma implementação Hibernate desta interface. Vamos seguir adiante e criar todas elas. |