Este teste unitário está correto?

3 respostas
J

Galera estou em dúvida se abordagem de teste está correta.
Imaginem que quero testar o cadastro de um usuario, fiz abaixo apenas de exemplo:

public class UserControler{

  public boolean saveUser(Usuario usuario){
       //...
    if(isValidUser()){
       dao.salvar(usuario)  
       return true;
     }else {
      return false;
     }
  }
}
public class Dao{

   public Usuario salvar(Usuario usuario){
            hibernate.save(usuario);        
   }
 
}
public class UserTest extends TestCase
{
	@Before
	public void setUp() throws Exception
	{
	}
	@Test
	public void testSave() throws Exception
	{
		UserController userController = new UserController();
		Assert.assertTrue(userController.salvar(UsuarioMock));
	}
}

minha dúvida está no fato de minha UserController possui uma dependência do DAO, ou seja, se o DAO falhar meu teste falha.

Neste caso eu deveria criar 2 testes? Um para o Dao.Salvar() e outro para o UserController.saveUser() ? Se for isso, como faço pra ter essa independência e testar estes dois separados, visto que meu UserController depende da minha persistência?

Ou está certo o modo acima e não há uma maneira mais correta?

3 Respostas

W

Estranho esse seu metodo:

public Usuario salvar(Usuario usuario)
    hibernate.save(usuario);          
}

porque vc nao retorna nada mas na assinatura do metodo vc diz que retorna Usuario. Outra coisa (pode ser que vc nao tenha colocado o codigo completo) mas saveUser no controle poderia ser static, ai vc evita de instanciar UserControler toda hora.

Mas enfim, eu nao eu acho que eh desnecessario fazer dois testes um pro controle e outro pro dao.

//Daniel

J

windsofhell:
Estranho esse seu metodo:

public Usuario salvar(Usuario usuario)
    hibernate.save(usuario);          
}

porque vc nao retorna nada mas na assinatura do metodo vc diz que retorna Usuario. Outra coisa (pode ser que vc nao tenha colocado o codigo completo) mas saveUser no controle poderia ser static, ai vc evita de instanciar UserControler toda hora.

Mas enfim, eu nao eu acho que eh desnecessario fazer dois testes um pro controle e outro pro dao.

//Daniel

ficou faltando o return, é que escrevi aqui direto no post, estou começando a fazer o teste agora, e nem implementei ainda meu DAO, por isso ficou errado escrevi direto aqui.

Fiquei com dúvida mesmo na foram de fazer e postei antes de iniciar. Acho desnecessário também fazer 2 testes, mas acho estranho também ter que testar unidade, e esta depender de outra camada, teoricamente unidade seria apenas o método.
Talvez seja o caso de aplicar os objetos Mocks, não sei como funcionaria no caso de um DAO, mas talvez fique mais correto.

fabiofalci

Nesse caso basta criar um Mock para o DAO.

Criado 5 de maio de 2009
Ultima resposta 5 de mai. de 2009
Respostas 3
Participantes 3