Olá,
quando fui começar os testes fiquei em dúvida sobre como deveria testar os DAO's, levando em conta aquilo que foi dito na apresentação que é bom que os testes rodem em qualquer máquina e tal.
Enfim, a dúvida foi em relação à conexão com o banco de dados. Pesquisei um pouco e vi que as pessoas costumam usar mocks (mencionados rapidamente no final da apresentação). Um que parece ser comumente utilizado é o EasyMock. Outras pessoas usam o HSQLDB na hora dos testes. Ou ainda, rodam os testes e depois dão rollback.
Gostaria que vocês explicassem como pode ser feito o teste dos DAO's (e aproveitando o tópico, o teste das servlets) com o JUnit. Se possível, coloquem um exemplo simples por favor.
desde já, obrigado
filipe
Olá.
Se o objetivo é realmente testar o acesso a dados feito pelos DAOs é necessário fazer os testes usando um banco de dados real, e não um DB mocked. Para isso, o HSQLDB é provavelmente a melhor opção (o Apache Derby é outra).
Alguns artigos sobre JUnit e HSQLDB:
Unit test JPA Entities with in-memory database
Unit testing database access using JPA (esse exemplo também faz uso do DbUnit)
Enterprise Java Community: Unit-Testing Hibernate With HSQLDB
O DbUnit pode ajudar bastante nos testes, em especial na hora de popular o DB com os dados para os testes e na hora de fazer as asserções. Com ele você não precisa fazer um SELECT para checar se o INSERT foi bem sucedido, por exemplo. Você pode definir o que espera que esteja em uma ou mais tabelas após o INSERT em um XML, e usar as asserções disponibilizadas pelo DbUnit para checar se o conteúdo no DB está de acordo.
Sobre mocks, antes de mais nada, a leitura de Mocks Aren't Stubs é recomendada para se entender a teoria por trás dessa técnica. Em Java acho que os dois frameworks mais conhecidos e utilizados são o EasyMock, o jMock e o Mockito. Desses só usei o EasyMock, então não tenho opinião sobre as vantagens e desvantagens de cada um, mas uma busca por eles resultará em vários posts e artigos comparando-os.
Servlets são mais difíceis de serem testadas com testes unitários, normalmente isso fica para os testes de integração / aceitação, pois na maioria das vezes os testes são um pouco complicados de serem escritos. Mas existem algumas alternativas. Uma é passar mocks de HttpServletRequest e HttpServletResponse para doGet(), doPost(), etc. E também existem alguns frameworks para testes de servlets, como o MockRunner e o ServletUnit. Como nunca usei nenhum deles, não tenho como fazer uma recomendação.
Espero ter ajudado. Se tiver outras dúvidas é só mandar.
Abraços.
Se o objetivo é realmente testar o acesso a dados feito pelos DAOs é necessário fazer os testes usando um banco de dados real, e não um DB mocked. Para isso, o HSQLDB é provavelmente a melhor opção (o Apache Derby é outra).
Alguns artigos sobre JUnit e HSQLDB:
Unit test JPA Entities with in-memory database
Unit testing database access using JPA (esse exemplo também faz uso do DbUnit)
Enterprise Java Community: Unit-Testing Hibernate With HSQLDB
O DbUnit pode ajudar bastante nos testes, em especial na hora de popular o DB com os dados para os testes e na hora de fazer as asserções. Com ele você não precisa fazer um SELECT para checar se o INSERT foi bem sucedido, por exemplo. Você pode definir o que espera que esteja em uma ou mais tabelas após o INSERT em um XML, e usar as asserções disponibilizadas pelo DbUnit para checar se o conteúdo no DB está de acordo.
Sobre mocks, antes de mais nada, a leitura de Mocks Aren't Stubs é recomendada para se entender a teoria por trás dessa técnica. Em Java acho que os dois frameworks mais conhecidos e utilizados são o EasyMock, o jMock e o Mockito. Desses só usei o EasyMock, então não tenho opinião sobre as vantagens e desvantagens de cada um, mas uma busca por eles resultará em vários posts e artigos comparando-os.
Servlets são mais difíceis de serem testadas com testes unitários, normalmente isso fica para os testes de integração / aceitação, pois na maioria das vezes os testes são um pouco complicados de serem escritos. Mas existem algumas alternativas. Uma é passar mocks de HttpServletRequest e HttpServletResponse para doGet(), doPost(), etc. E também existem alguns frameworks para testes de servlets, como o MockRunner e o ServletUnit. Como nunca usei nenhum deles, não tenho como fazer uma recomendação.
Espero ter ajudado. Se tiver outras dúvidas é só mandar.
Abraços.
Ajudou sim, obrigado!
[]'s
[]'s