| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2006 09:50:12
|
Fabricio Cozer Martins
GUJ Ranger
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
Olá,
pessoal como vocês realizam os testes unitários de operações CRUD ? Alguém tem alguma referência que fale sobre isso ? Ou alguém pode relatar como é feito ?
Por exemplo, como vocês manipulam a base de dados ? Diretamente na mão ou via teste também, exemplo: na operação de consulta, devo no mesmo teste incluir os registros e depois buscá-lo ? Como vocês criam as classes de Teste ? Uma para cada entidade ? Por exemplo a entidade Cliente, vocês colocam todos os testes referentes a clientes nessa classe ?
Valeu!
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2006 13:41:24
|
jgbt
GUJ Master
![[Avatar]](/images/avatar/25df35de87aa441b88f22a6c2a830a17.png)
Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline
|
use dbunit p/ controlar os registros que vc vai usar nos seus testes.
http://dbunit.sourceforge.net/
[]'s
|
João Bier
Desenvolvedor Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2006 13:54:29
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Quanto faço testes unitários de métodos que envolvem persistencia eu uso mocks pros objetos relativos a persistencia como DAOs, Hibernate Session, etc.
Um teste que acessa o banco de dados não é unitario.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2006 14:57:41
|
s4nchez
Virtual Machine Man
![[Avatar]](/images/avatar/bef4d169d8bddd17d68303877a3ea945.jpg)
Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline
|
Um teste que acessa o banco de dados não é unitario.
Com o DBUnit seu teste vai acessar o banco de dados para ajudar nos asserts
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2006 15:42:12
|
joao.vitor
Entusiasta Java
![[Avatar]](/images/avatar/a941493eeea57ede8214fd77d41806bc.jpg)
Membro desde: 15/09/2003 23:56:23
Mensagens: 15
Localização: Belo Horizonte
Offline
|
Fabrício Cozer Martins wrote:
Pessoal como vocês realizam os testes unitários de operações CRUD ? Alguém tem alguma referência que fale sobre isso?
Ou alguém pode relatar como é feito?
Para testar uma inserção insiro o objeto, pego o id faço uma busca e verifico se inseriu.
Para fazer uma consulta simples insiro uma ou mais objetos dependentes, sei os valores inseridos, preencho o filtro e verifico se foram retornados x objetos em uma consulta. A parte de carga pode ser feita pelo DBUnit mas não vejo muito ganho, nesse caso prefiro java a xml.
Os testes não são realmente unitário mas para testar isso tem que ser em métodos diferentes mesmo...
Fabrício Cozer Martins wrote:
Por exemplo, como vocês manipulam a base de dados?
Diretamente na mão ou via teste também, exemplo: na operação de consulta, devo no mesmo teste incluir os registros e depois buscá-lo?
Manipulo a base toda no testes inserindo e busco tudo nos testes.
É tudo transacional e posso rodar os testes sempre...
Você pode escolher usar o DBUnit também. Você dá uma carga no banco usando XML e pode contar com esses dados durante os testes unitários.
É uma questão de escolha.
Fabrício Cozer Martins wrote:
Como vocês criam as classes de Teste?
Uma para cada entidade?
Por exemplo a entidade Cliente, vocês colocam todos os testes referentes a clientes nessa classe?
Uso uma classe que herda de AbstractTransactionalDataSourceSpringContextTests do Spring em meus testes de DAO.
Usar reflexão para inserir valores no objeto que está sendo testado facilita muito o teste.
Os relacionamentos de um objeto com outras tabelas devem ser setados "na mão" mas só de preencher todas as propriedades obrigatórias e testar inserção em todas as colunas já ajuda.
Para testar classes com regras de negócio uso o EasyMock e não acesso o banco.
|
João Vitor Lacerda Guimarães - @joaovitor |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2006 20:08:45
|
AllMighty
Java Ninja
![[Avatar]](/images/avatar/c900197841211ba608f56.gif)
Membro desde: 16/08/2004 17:21:42
Mensagens: 266
Localização: São Paulo
Offline
|
Uma técnica que eu já vi sugerida mas nunca usei é rodar um banco em memória para fazer os testes. (eu costumo mockar o acesso a recursos).
|
Rafael de F. Ferreira
Blog: http://www.rafaelferreira.net/
Links miscelâneos: http://stoa.usp.br/rafaelferreira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2006 20:34:43
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
AllMighty wrote:Uma técnica que eu já vi sugerida mas nunca usei é rodar um banco em memória para fazer os testes. (eu costumo mockar o acesso a recursos).
Quando usar um banco eh absolutamente e estritamente necessario (ou seja, vc ta testando a camada mais funda do sistema, nao uma regra de negocios qualquer), usar um banco em memoria (HSQL eh o que a gente usa direto aqui) vai bem.
Mas so deve ser usado numa parte da aplicacao que normalmente acaba sendo testada por testes funcionais, anyway... faz sentido ter certeza que a configuracao do Hibernate ta certa num teste unitario?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2006 23:28:43
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
cv wrote: faz sentido ter certeza que a configuracao do Hibernate ta certa num teste unitario?
Eu acho importante, principalmente porque você consegue pegar aqueles erros chatos de colunas com nomes errados e esse tipo de coisa.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2006 19:18:33
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Ok, mas se vc ta falando com o banco, nao ta na hora de ter uma suite de testes funcionais, mesmo que sejam so smoke tests?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2006 19:24:45
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
cv wrote:Ok, mas se vc ta falando com o banco, nao ta na hora de ter uma suite de testes funcionais, mesmo que sejam so smoke tests?
Com certeza
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2006 22:14:33
|
Rubem Azenha
GUJ Master
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.jpg)
Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline
|
Hum, testes que usam banco não são unitários? Os testes que eu faço nos EJBs com o DBUnit para ver se os finders estão fazendo as buscas corretamente ou se os métodos de negócio estão certo não são unitários?
|
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/06/2006 23:14:26
|
ZehOliveira
GUJ Ranger
Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline
|
microfilo wrote:Hum, testes que usam banco não são unitários? Os testes que eu faço nos EJBs com o DBUnit para ver se os finders estão fazendo as buscas corretamente ou se os métodos de negócio estão certo não são unitários?
Não, por que o resultado de teste unitário deve depender exclusivamente da unidade que está sendo testada e ele deve ser robusto e consistente: sempre fornecer o mesmo resultado para a mesma implementação de uma classe. Ficaria muito difícil confiar em testes que dizem uma coisa hoje e amanhã dizem outra diferente, e usar banco de dados em testes unitários leva a isso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/06/2006 15:23:57
|
Fabricio Cozer Martins
GUJ Ranger
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
Sim, é justamente esse ponto, o teste unitário não deve 'atrapalhar' outros testes, é isso que quero entender como fazer na melhor maneira possível, porque antes de executar os testes unitários , a base de dados deve estar num formato X, e depois de executar os testes o banco deve retornar ao estado X, ou não ?
Como vocês fazem? Deixam uma instância do banco pra cada desenvolvedor ?
O HSQL não pode esconder alguns erros ? Pois se como eu uso outro banco .. ficaria complicado testar no HSQL.
Vou dar uma olhada no dbunit.
Outra coisa também quando vocês na mesma suite de testes, testam inclusões, vocÊs no mesmo teste, obtém para verificar se foi incluída corretamente, e depois do método de teste vcs excluem os registros incluídos ? É que aí estaria testando os métodos de inclusão, consulta, e exclusão...
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2006 07:10:02
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
microfilo wrote:Hum, testes que usam banco não são unitários?
Nope. Podem ser testes funcionais ou de integracao, mas por definicao nao podem ser unitarios. Testes unitarios testam uma unidade de cada vez - se vc ta usando um banco de dados, quer dizer que tem mais de uma classe envolvida (nem que seja uma Connection jdbc).
microfilo wrote:Os testes que eu faço nos EJBs com o DBUnit para ver se os finders estão fazendo as buscas corretamente ou se os métodos de negócio estão certo não são unitários?
Nope. Unitarios so testam uma classe.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/06/2006 14:42:45
|
s4nchez
Virtual Machine Man
![[Avatar]](/images/avatar/bef4d169d8bddd17d68303877a3ea945.jpg)
Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline
|
cv wrote:
Nope. Unitarios so testam uma classe.
Você está dizendo que se estou testando um método de uma classe e este por sua vez invoca outras classes, o teste não é mais unitário?
Pelo que eu sei, testes de unidade servem pra "exercitar" uma pequena porção de código (normalmente um método isolado), independente do que esta porção faz.
Se eu entendi errado (sua afirmação ou o conceito) por favor me corrija
|
Ivan Sanchez | coding dojo | blog | twitter |
|
|
 |
|
|