Pessoal, já pesquisei bastante mais ainda não consegui, estou começando a utilizar o Junit para teste.
Alguem sabe como criar um mock (easymock) que consiga se comunicar realmente com o banco de dados (@in). A dificuldade para conseguir esse acesso ao BD esta muita - rsrs
Vejam como estou fazendo:
public class ClientManagerTest {
/**
* ClientManager
*/
private ClientManager clientManager;
/**
* OrganizationManagerInterface
*/
private OrganizationManagerInterface mock;
/**
* List of organization
*/
private List<Organization> organizationList = new ArrayList<Organization>();
/**
* setUp
* @throws Exception Exception
*/
@Before
public void setUp() throws Exception {
this.setClientManager(new ClientManager());
this.mock = createStrictMock(OrganizationManagerInterface.class);
}
/**
* testSearchAll
*/
@Test
public void testSearchAll() {
expect(this.mock.searchAll()).andReturn(organizationList);
replay(this.mock);
if (this.mock.searchAll().size() == 0) {
fail("busca não retornou registros.");
}
}
}
O problema q não esta existindo acesso ao BD, pois o size do searchAll retorna 0, quando na realidade essa busca teria q retornar em torno de 50 registros existente na base de dados.
Então, você não está entendendo o conceito de teste unitário. O teste unitário é um teste em uma unidade de SW independentemente das dependências que essa unidade tenha para com outras unidades de SW. O papel do EasyMock é justamente isolar as depenências que uma classe tem para com outras, ele provê um mock de uma classe onde o resultado das chamadas dos métodos são controlados, assim você tem certeza que o seu código funciona independentemente se o código da outra classe funcione ou não.
O Mock NÃO se conecta a nenhum banco de dados e a nenhum outro recurso, você apenas o configura. Você precisa que um método x retorne uma lista, simples, inicialize uma lista com os valores desejados e configure o método desejado para retornar a lista criada.
No google você acha vários artigos sobre teste unitários e os frameworks disponíveis.
Vc não deve acessar o banco a partir dos mocks. Os mocks devem ser utilizados p/ simular um comportamento esperado. Se vc quer testar os algoritmos q acessam o banco vc, então, estará fazendo um teste de integração. Use testes de integração p/ testar as fronteiras do seu aplicativos como DAOs ou componentes q acessem LDAP, MAIL SERVERS… Use mock p/ implementar testes unitários das classes “internas”, tipo os models, q usam essas outras classes. Vc usa o mock p/ ñ usar a própria classe e assim o comportamento esperado em cada teste.
Pelas algumas resposta que obtive acredito que terei que usar o DBunit. Irei dá uma pesquisada como usa-lo, se alguem, puder colocar um exemplo ou um link agradeço.
Izaura ainda vc não intendeu o conceito de um teste de unidade(JUnit/EasyMock)) sugiro estudar o assunto para vc conseguir aplicar o teste a onde vc realmente quer… http://pt.wikipedia.org/wiki/Teste_de_software exitem varios tipos de testes…
Primeiramente vc quer testar o que ?
esta classe ‘OrganizationManagerInterface’ ou a classe criteria.list() ?
[quote=Priuli]Izaura ainda vc não intendeu o conceito de um teste de unidade(JUnit/EasyMock)) sugiro estudar o assunto para vc conseguir aplicar o teste a onde vc realmente quer… http://pt.wikipedia.org/wiki/Teste_de_software exitem varios tipos de testes…
Primeiramente vc quer testar o que ?
esta classe ‘OrganizationManagerInterface’ ou a classe criteria.list() ?[/quote]
Esta classe OrganizationManagerInterface é uma intefarce do manager q tem o metodo SearchAll que retorna a criteria.list
No metodo chamado direto pelo JSF o return da criteria.list() são os dados q retornaram na Criteria.
Pelo o que entendi nesse caso eu teria q usar o DBunit para exportar os dados para um XML e aí sim realizar os testes … estou mais perto agora??? rsrs
Desculpem o incomodo, mais realmente ontem foi o primeiro dia q começei a tentar realizar alguns testes. Estava muita confusa em relação a teste unitarios e de integração. Hoje já clareou um pouco mais, porém sei q ainda tenho muito o q pesquisar.