Junit não funciona

13 respostas
A
import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

public class TestaMassaDeDados extends TestCase {

	public void testSomaSalarioAndreAS() {
	
		// assertEquals(10.000, new Andre("André Luis Araújo dos Santos").salGerente(4.000));

		
		MassaDeDados massaDeDados = new MassaDeDados();
		for (int i = 0; i < 10; i++) {
			assertNotSame(10.0, new Andre(massaDeDados.getNomeList().get(i)).salGerente(massaDeDados.getHoraExtraList().get(i)));
			System.out.println("Salário:" + new Andre(massaDeDados.getNomeList().get(i)).salGerente(massaDeDados.getHoraExtraList().get(i)));
		}
		
	}
}

class Andre extends Funcionario {

	public Andre(String nomeCompleto) {
		super(nomeCompleto);
	}

	@Override
	double salGerente(double horaExtra) {
		return fixo + horaExtra;
	}
}

abstract class Funcionario extends Salario {
	String nomeInteiro;

	public Funcionario(String nomeCompleto) {
		nomeInteiro = nomeCompleto;
		System.out.println("Funcionário: " + nomeInteiro);
	}

	public Funcionario() {
		// TODO Auto-generated constructor stub
	}
}

abstract class Salario {
	double fixo = 9.0;

	abstract double salGerente(double horaExtra);
}

class MassaDeDados {

	private List<String> nomeList = new ArrayList<String>(10);
	
	private List<Double> horaExtraList = new ArrayList<Double>(10);
	public MassaDeDados() {
		for (int i = 0; i < 10; i++) {
			nomeList.add("André Luis Araújo dos Santos" + i);
			horaExtraList.add(i + .000);
		}
	}

	public List<Double> getHoraExtraList() {
		return horaExtraList;
	}
	
	public List<String> getNomeList() {
		return nomeList;
	}
}

13 Respostas

R

Pra que a massa de dados? Se você testa com 1.0 não tem porque testar com 2.0… como também não faz sentido testar com 3.0, 4.0, … a computação é exata.

Pode-se testar com massa de dados que seria um teste de carga, para verificar quantas conexões simultaneas/usuarios sua estrutura aguenta. Agora em testes unitários eu não vejo sentido nisso.

O que se faz é testar com números que possam gerar situações especificas. Por exemplo, se você já testou com um numero positivo ótimo. Teste com um numero positivo e com ponto flutuante para ver se passa. Depois teste com número negativo para ver o que acontece e verifica se está agindo corretamente. E assim por diante, tente “sacanear” teu programa ao máximo para gerar situações atipicas e ver como seu código lida com isso.

Acho que você não pegou ainda o espirito dos testes unitários.

Por exemplo o que você quer testar nesse código? Qual seria seu caso de uso/estória?

A

RafaelViana:
Pra que a massa de dados? Se você testa com 1.0 não tem porque testar com 2.0… como também não faz sentido testar com 3.0, 4.0, … a computação é exata.

Pode-se testar com massa de dados que seria um teste de carga, para verificar quantas conexões simultaneas/usuarios sua estrutura aguenta. Agora em testes unitários eu não vejo sentido nisso.

O que se faz é testar com números que possam gerar situações especificas. Por exemplo, se você já testou com um numero positivo ótimo. Teste com um numero positivo e com ponto flutuante para ver se passa. Depois teste com número negativo para ver o que acontece e verifica se está agindo corretamente. E assim por diante, tente “sacanear” teu programa ao máximo para gerar situações atipicas e ver como seu código lida com isso.

Acho que você não pegou ainda o espirito dos testes unitários.

Por exemplo o que você quer testar nesse código? Qual seria seu caso de uso/estória?

Oi Rafael, qto. hem!? hehehe… Kra, valeu mesmo pela ajuda, no entanto ficaram ainda algumas dúvidas:

1 - Não ve necessidade de massa de dados? Mas idéia é testar se a atualização do meu salário é igual a 10 mil reais

for (Integer i = 0; i < 10; i++) { Integer salarioAtualizado = new Andre(massaDeDados.getNomeList().get(i)).salGerente(massaDeDados.getHoraExtraList().get(i)); assertEquals(new Integer(9), salarioAtualizado); System.out.println("Salário:" + new Andre(massaDeDados.getNomeList().get(i)).salGerente(massaDeDados.getHoraExtraList().get(i))); }
Recebo do BD uma lista de salários e testo cada um via massa de dados para saber se são iguais ao 10 mil (caso de uso), não entendí o que você quiser em relação à teste de massa…

A

Maracuja:
O que nao funciona?

Rodei seu tescase, ele apresentou a saida:

Funcionário: André Luis Araújo dos Santos0
Funcionário: André Luis Araújo dos Santos0
Salário:9.0
Funcionário: André Luis Araújo dos Santos1
Funcionário: André Luis Araújo dos Santos1
Salário:10.0

O teste teve sucesso.

Oi Maracujá, como vai? Obrigado pela ajuda…

Kra, não funcionou corretamente não, pelo menos não conforme minhas expectativas, pois bem,

assertNotSame(10.0, new Andre(massaDeDados.getNomeList().get(i)).salGerente(massaDeDados.getHoraExtraList().get(i))); Alí no assertNotSame eu disse “dez”, e na prática
ele disse que dez era ok.

A

Hehehe… Verdade…

Kra, o conceito de teste de massa é esse mesmo ao qual estou aplicando? Agora fiquei em dúvida…

A

O JUnit para quando lança um AssertionError, né? Quero dizer ele nem executou toda a massa de dados (teste) ele parou no caso no segundo de 10 possibilidades de testes especificadas na massa de dados… O conceito é esse mesmo?

R

Não.

Por exemplo, você tem uma suite de testes (TestSuite) com dez classes de testes (TestCase - normalmente uma classe teste para cada classe .java).

Se ele achar um error ou fail ele irá parar aquele teste no mesmo instante. Porém, não para a rotina de testes. Continua testando os outros testes da suite.

R

andredecotia:
RafaelViana:
Pra que a massa de dados? Se você testa com 1.0 não tem porque testar com 2.0… como também não faz sentido testar com 3.0, 4.0, … a computação é exata.

Pode-se testar com massa de dados que seria um teste de carga, para verificar quantas conexões simultaneas/usuarios sua estrutura aguenta. Agora em testes unitários eu não vejo sentido nisso.

O que se faz é testar com números que possam gerar situações especificas. Por exemplo, se você já testou com um numero positivo ótimo. Teste com um numero positivo e com ponto flutuante para ver se passa. Depois teste com número negativo para ver o que acontece e verifica se está agindo corretamente. E assim por diante, tente “sacanear” teu programa ao máximo para gerar situações atipicas e ver como seu código lida com isso.

Acho que você não pegou ainda o espirito dos testes unitários.

Por exemplo o que você quer testar nesse código? Qual seria seu caso de uso/estória?

Oi Rafael, qto. hem!? hehehe… Kra, valeu mesmo pela ajuda, no entanto ficaram ainda algumas dúvidas:

1 - Não ve necessidade de massa de dados? Mas idéia é testar se a atualização do meu salário é igual a 10 mil reais

for (Integer i = 0; i < 10; i++) { Integer salarioAtualizado = new Andre(massaDeDados.getNomeList().get(i)).salGerente(massaDeDados.getHoraExtraList().get(i)); assertEquals(new Integer(9), salarioAtualizado); System.out.println("Salário:" + new Andre(massaDeDados.getNomeList().get(i)).salGerente(massaDeDados.getHoraExtraList().get(i))); }
Recebo do BD uma lista de salários e testo cada um via massa de dados para saber se são iguais ao 10 mil (caso de uso), não entendí o que você quiser em relação à teste de massa…

Não vejo necessidade dessa informação vir de um banco de dados. Só faço testes com bancos de dados para a camada de persistência (testes de integração).

Esse seu código está bagunçado e confuso. Aconselho a revê-lo. Por exemplo, Funcionario extends Salario? Isso não faz sentido.

Essa sua estrutura ficaria algo ± assim (pode conter erros, foi digitado na hora sem testes):

class Funcionario { double salarioFixo = 9000; //Tá certo.. o Salario poderia ser uma classe... mas ai você usaria composição e não agregação... i double calcularSalario(double valorExtra) { return salarioFixo += valorExtra; } }

E o teste ficaria algo mais simples:

class TesteFuncionario { @Test public void testeSeFuncionarioRecebeValorExtra() { Funcionario andre = new Funcionario(); assertEquals( new Double(10000), andre.calcularSalario(1000.0)); } }

A

Mas como isso é um teste de massa se não há um iterador? ? ?

R

Mas como isso é um teste de massa se não há um iterador? ? ?

Isso é um teste unitário. Você testa se a lógica de determinado método está certa.
Teste de massa nunca ouvi falar. Como comentei anteriormente, há o teste de carga. Porém, não tem nada haver com o que você está tentando fazer.
Realmente, não vi sentido nisso que você está fazendo.

J

O que nao funciona?

Rodei seu tescase, ele apresentou a saida:

Funcionário: André Luis Araújo dos Santos0
Funcionário: André Luis Araújo dos Santos0
Salário:9.0
Funcionário: André Luis Araújo dos Santos1
Funcionário: André Luis Araújo dos Santos1
Salário:10.0

O teste teve sucesso.

J

Justo, muito justo, esta funcionando corretamente. Veja o javadoc

assertNotSame garante que os dois objetos nao sao o MESMO objeto, e nao que eles nao sejam iguais (em valor no seu caso)!

EDITANDO:

Use assertEquals em vez do assertNotSame para o seu caso.

EDITANDO:

opsssssss

Use assim

assertFalse(new Double(10.00).equals(new Andre(massaDeDados.getNomeList().get(i)).salGerente(massaDeDados.getHoraExtraList().get(i))));

Pro assertEquals teria que mudar o seu testcase.

J

Testes unitários

Teste de Unidade PT (sic)
Unit Testing EN

Existem alguns tópicos interessantes no GUJ sobre o assunto.
http://www.guj.com.br/java/92487-pq-os-teste-unitarios-nao-sao-tao-populares

Mais
Busca

Geralmente ter testes unitários em um sistema vem com outras coisas juntas, como usar maven para build com execuçao da fase de testes depois de um build, cobertura para vc poder saber o que esta sendo coberto pelos testes, e ainda relatórios (Maven Surefire Report Plugin). Ainda também uma ferramenta de integraçao continua por exemplo. continuum .

PS: Existem outras ferramentas para cada caso além dessas citadas.

J

O que é teste de massa?

Testar dados?

Nunca ouvi falar nisso.

Editando.

Adicionando info

Criado 25 de abril de 2011
Ultima resposta 26 de abr. de 2011
Respostas 13
Participantes 3