Junit - EasyMock - Acesso ao BD

[code]
@Stateful(mappedName = “ejb/ClientManager”)
@Name(“clientManager”)
@Local(OrganizationManagerInterface.class)
@Remote(OrganizationManagerInterface.class)
@Scope(ScopeType.CONVERSATION)
public class ClientManager implements OrganizationManagerInterface {

 /** 
 * EntityManager 
 */  
 @In  
 private EntityManager entityManager;  
 
 
 public List<Organization> searchAll() {  
  ..  
  ..  
  ..  
  return criteria.list();
 }  

} [/code]

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.

Desde já agredeço!

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.

[]'s

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.

Certo. Mock para cessar o BD não rola.

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.

De qq forma estou na busca - rs

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.

Izaura.

Izaura,

Dois tópicos seus com o mesmo fóco. Vamos manter apenas um, OK?

http://www.guj.com.br/posts/list/220858.java.

Favor continuar a discussão no outro tópico. Esse tópico será trancado pela moderação