Como vcs realizão testes entre camadas dependentes?
Exemplo: Uma classe controladora que recebe parâmetros da View e chama a camada de lógica. :roll:
Se puderem postem exemplos e sugestões.
desde já agradeço. 8)
Como vcs realizão testes entre camadas dependentes?
Exemplo: Uma classe controladora que recebe parâmetros da View e chama a camada de lógica. :roll:
Se puderem postem exemplos e sugestões.
desde já agradeço. 8)
Cara, tente ser mais especifico. Vc quer dizer fazer teste isolados em cada uma, ver como elas se comunicam em conjunto?É isso?
O objetivo principal e fazer os testes unitários em cada camada. Queria saber com realizar os testes quando possuo camadas dependentes.
Se puderem postem exemplos e sugestões.
Desde já agradeço.
Testes unitarios, como o próprio nome diz, são feitos em unidades pequenas das classes. De preferencia, um teste unitário não deve depender de nenhum outro teste.
No caso da sua pergunta, usando por exemplo o Struts2 como exemplo, podemos testar se o fluxo de um determinado MODEL ou VIEW (do MVC) será executado após o controller.
Imaginando o cenário.
Temos uma classe de Login, que possui o método doLogin(). Caso os username e password estejam corretos, o método doLogin vai retornar a String success, caso contrário retorna a String error.Apenas para exemplo, vamos usar valores estáticos para username e password, em um teste real, você deve utilizar um Mock object (EasyMOck ou JMock) para simular os DAO. Vamos predefinir que o válido seja (username="guj" e password="java"). Temos o seguinte exemplo do Controller:
public String doLogin() {
//--Testar se os campos da UI não estão em brancos
if (this.username == null || this.username.trim().length() <= 0) {
//sua mensagem de erro de retorno entra aqui
return "error";
}
if (this.password == null || this.password.trim().length() <= 0) {
//sua mensagem de erro de retorno entra aqui
return "error";
}
userDAO = new UserDAO();
// -- Testar se os valores são válidos no banco de dados
if (!userDAO.usuarioEhValido(username, password)) {
//sua mensagem de erro de retorno entra aqui
return "error";
}
//TUDO OK, retorna SUCCESS
return "success";
}
E agora para a classe JUnit (usiando o JUnit 4), temos o seguinte
@Before
public void setUp() throws Exception {
//Iniciando os objetos
myController = new MyController();
}
/**
* O primeiro teste no método doLogin() é feito com os valores (username e password)
* em branco. Espera-se retorno "error"
*/
@Test
public void testDoLoginQuandoValoresEstaoEmBranco() {
assertEquals(myController.doLogin(),"error");
}
/**
* Testa o doLogin(), mas utilizando os valores errados para os campos
* username e password.
* Espera-se o retorno "error"
*/
@Test
public void testDoLoginQuandoUsernameEPasswordEstiveremErrados() {
myController.setUsername("wrongUsername");
myController.setPassword("wrongPassword");
assertEquals(myController.doLogin(),"error");
}
/**
* Test o doLogin() com username e password válidos. Espera-se retorno "true"
*/
@Test
public void testDoLoginComSucesso() {
myController.setUsername("guj");
myController.setPassword("java");
assertEquals(myController.doLogin(),"true");
}