Dúvidas com Testes

3 respostas
paulovittor23

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)

3 Respostas

Guto_Magalhaes

Cara, tente ser mais especifico. Vc quer dizer fazer teste isolados em cada uma, ver como elas se comunicam em conjunto?É isso?

paulovittor23

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.

Jair_Rillo_Junior

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() &lt= 0) {
			//sua mensagem de erro de retorno entra aqui
			return "error";
		}
		if (this.password == null || this.password.trim().length() &lt= 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");		
	}
Criado 15 de agosto de 2007
Ultima resposta 15 de ago. de 2007
Respostas 3
Participantes 3