Teste unitário - JUnit, exemplo? HELPP

8 respostas
C

Dai galera,
to dando inicio as minhas atividades em testes de unidade com a ferramenta JUnit ... ja li bastante a respeito mas pra colocar em pratica ta meio confuso ...tenho um método ai e gostaria q vcs m dessem uma mão a respeito d como posso fazer um teste unitario nesse método pois to sem chao!! ai vai ele ... se alguem quiser colaborar comigo eu agradeço!!

public class Calculator {

public float[][] getMatrixChromaticAdapt(String wpSource, String wpDest, String method, String fieldOfView) {

	float Xws, Yws, Zws, Xwd, Ywd, Zwd;
	float[] tmp = getWhitePointMatrixXYZ(wpSource, fieldOfView);
		Xws = tmp[0];
		Yws = tmp[1];
		Zws = tmp[2];
		tmp = getWhitePointMatrixXYZ(wpDest, fieldOfView);
		Xwd = tmp[0];
		Ywd = tmp[1];
		Zwd = tmp[2];
		
		float[][] methodMatrix = getChromAdaptMatrix(method);
		float[][] methodMatrixInv = getChromAdaptMatrixInv(method);
		
		float[] Ms = MatrixOp.multiply_1x3_3x3(new float[] {Xws, Yws, Zws}, methodMatrix);
		float[] Md = MatrixOp.multiply_1x3_3x3(new float[] {Xwd, Ywd, Zwd}, methodMatrix);
		
		float[][] M = new float[3][3];
		M[0][1] = M[0][2] = M[1][0] = M[1][2] = M[2][0] = M[2][1] = 0;
		M[0][0] = Md[0]/Ms[0];
		M[1][1] = Md[1]/Ms[1];
		M[2][2] = Md[2]/Ms[2];
		
		M = MatrixOp.multiply_3x3_3x3(methodMatrix, M);
		M = MatrixOp.multiply_3x3_3x3(M, methodMatrixInv);
	
		return M;
		
	}

8 Respostas

C

Maracuja …

Obrigado pelas dicas, mas ja tinha visto e lido esses sites.
Eu entendo que é chato pedir algum exemplo, mas a minha dificuldade é um exemplo concreto de como poderia ser feito um teste unitario nesse método.

Agradeço quem puder colaborar com algum ex :slight_smile:

guilherme.chapiewski

Ve se isso te ajuda a entender um pouco melhor: http://gc.blog.br/2007/05/09/test-driven-development-in-a-nutshell/

Abraços,
Guilherme

C

Como disse, eu ja li muito a respeito, mas é bem
mais facil fazer testes unitarios com metodos q
retornam valores concretos …

a minha duvida neste caso é realmente criar um
teste p esse metodo :cry:

C

Neste caso o que eu poderia testar nesse metodo …
pode ser dando valores sim …

otaviofcs

Tá forçando um pouco, né? Mas, vamos tentar ajudar porque os testes no início são um pouco diferente do que estamos acostumados.

Obs1: Vou copiando o exemplo do Maracujá pra adiantar minha via
Obs2: Veja bem, o import de dependências vai ficar por sua conta.

public class MyTest extends TestCase{
 
  public void testCalculator () {
        float[][] fff = new Calculator().getMatrixChromaticAdapt(.... seus args....);
        assertTrue(fff[0][0] == valorEsperadoDeRetornoDoFloat0_0);
        assertTrue(fff[0][1] == valorEsperadoDeRetornoDoFloat0_1);
        assertTrue(fff[1][0] == valorEsperadoDeRetornoDoFloat1_0);
        assertTrue(fff[1][1] == valorEsperadoDeRetornoDoFloat1_1);
  }
 
 }

--vou editar porque deu pau no guj e perdi tudo---

como sua entrada de parâmetros é controlada, você sabe o que ele deveria cuspir. O assertTrue() é justamente para comprovar que o dado que retornou é exatamente igual ao ESPERADO DE RETORNO.

ficou melhor?

cv1

claudio83:
Como disse, eu ja li muito a respeito, mas é bem
mais facil fazer testes unitarios com metodos q
retornam valores concretos …

E o que seria um “retorno de valor concreto”, que o seu metodo de exemplo nao faz?

C

otaviofcs ficou melhor sim! Obrigado pelo exemplo!!!

Cara, acho q os exemplos referentes a testes unitarios sao muito concretos, sao de aplicacoes bancarias, ou algum exemplo de aplicacao que no meio de numeros nao pode haver letra … esse tipo de “teste” mais concreto que quis m referir …

ja nesse metodo q postei ai acho um pouco mais complicado. Como disse estou inciando, entao nao tenho experiencia nem pratica em testes, por isso postei o codigo aqui pra pedir uma ajuda em relacao a minha dificuldade.

abraco

otaviofcs

Cara, eu te entendo. No início odiava a parte de testes. Depois passei a preparar eles sempre. Tô começando a fazer test-driven development. Dá trabalho de pensar, mas clareia as idéias.

Outra coisa, eu tenho sempre em mente que o melhor método é o menor método. O livro refactoring do Martin Fowler é muito bom (sempre esse cara :)) pra abrir a cabeça sobre refatoração e métodos pequenos (eu sempre fui muito focado em otimização dos métodos, ao invés de otimização da manutenção).

O método fica mais claro de entender, ler e debugar, além de limitar o escopo do teste. Esse teu método acaba tendo que testar muita coisa (por exemplo divisão por zero, que eu nem coloquei nos “testes”). Faz ele retornar um objeto ao invés desse array de array ([][]). Fica bem mais fácil de ler e de saber pra que serve e o quê você quer testar.

abraços e boa sorte,

otávio

Criado 5 de junho de 2007
Ultima resposta 5 de jun. de 2007
Respostas 8
Participantes 4