Injeção de Valores usando Reflection e Annotation em Java (Testes Unitários) - Parte 05

17. novembro 2011 00:10 by BBranquinho in Annotation, Java, Reflection, Tutoriais  //  Tags: , , ,   //   Comentários (0)

Este é o último post que trata da injeção de valores usando reflexão e anotação.

É importante lembrar que este projeto pode ser baixado em http://iar.codeplex.com/

Para finalizar nosso trabalho foram criados alguns testes unitários que mostram o uso da injeção de valores em algumas classes. Existem diversos cenários em que este processo pode ser aplicado. Sendo assim, apenas alguns exemplos foram mostrados para demonstrar a abrangência do trabalho.

Um exemplo de classe com as anotações criadas é mostrado a seguir na classe PrivateStub03.

package br.com.wpattern.annotation.test.stub;

import java.util.Date;

import br.com.wpattern.annotation.WPatternClass;
import br.com.wpattern.annotation.WPatternField;
import br.com.wpattern.annotation.WPatternValue;

@WPatternClass(description="Private Stub 03")
public class PrivateStub03 {

	@WPatternField(name="PARAM01")
	private boolean booleanParameter;

	@WPatternField(name="PARAM02", values={ @WPatternValue(value="1"), @WPatternValue(value="2"),  @WPatternValue(value="3"), @WPatternValue(value="4") })
	private int intParameter;

	@WPatternField(name="PARAM03")
	protected long longParameter;

	@WPatternField(name="PARAM04")
	protected char charParameter;

	@WPatternField(name="PARAM05")
	public double doubleParameter;

	@WPatternField(name="PARAM06")
	public float floatParameter;

	@WPatternField(name="PARAM07")
	public Date dateParameter;

	@Override
	public String toString() {
		return "PrivateStub03 [booleanParameter=" + this.booleanParameter
				+ ", intParameter=" + this.intParameter + ", longParameter="
				+ this.longParameter + ", charParameter=" + this.charParameter
				+ ", doubleParameter=" + this.doubleParameter + ", floatParameter="
				+ this.floatParameter + ", dateParameter=" + this.dateParameter + "]";
	}

}

Na classe PrivateStub03 existe a demonstração do uso das anotações, incluindo a validação dos valores que são aceitados em um dos parâmetros. O teste unitário exibido no próximo código demonstra a injeção dos valores para a classe PrivateStub03.

private final Logger logger = Logger.getLogger(this.getClass());

	private MapFields mapFields;

	@Before
	public void startUp() {
		this.mapFields = new MapFields();

		try {
			this.mapFields.AddField("PARAM01", "true");
			this.mapFields.AddField("PARAM02", "4");
			this.mapFields.AddField("PARAM03", "6");
			this.mapFields.AddField("PARAM04", "c");
			this.mapFields.AddField("PARAM05", "5.45");
			this.mapFields.AddField("PARAM06", "9.78");
			this.mapFields.AddField("PARAM07", "01-01-2000 01:01:01");
		} catch (MapFieldException e) {
			this.logger.error(e.getMessage());
			Assert.fail(e.getMessage());
		}
	}

	@Test
	public void privateStub03_testAllInjection_success() {
		this.logger.debug("Test injection of PrivateStub03.");

		PrivateStub03 instanceObject = new PrivateStub03();

		try {
			InjectorManager.injectAllValues(instanceObject, this.mapFields);
		} catch (InjectionException e) {
			this.logger.error(e.getMessage());
			Assert.fail(e.getMessage());
		}

		this.logger.debug(instanceObject.toString());
	}

O resultado da execução deste teste é:

17-11-2011 02:17:06,587; [main]; DEBUG; br.com.wpattern.annotation.test.AnnotationTest;  - Test injection of PrivateStub03.

17-11-2011 02:17:06,777; [main]; DEBUG; br.com.wpattern.annotation.test.AnnotationTest;  - PrivateStub03 [booleanParameter=true, intParameter=4, longParameter=6, charParameter=C, doubleParameter=5.45, floatParameter=9.78, dateParameter=Sat Jan 01 01:01:01 BRST 2000]

Como podemos observar os valores foram automaticamente injetados nas variáveis.

O próximo vídeo mostra a implementação e a execução dos testes unitários.

Foi um prazer poder apresentar este trabalho.

Até o próximo estudo, abraços.

Pingbacks and trackbacks (1)+

Comentar

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading

WPattern

O objetivo deste blog é de disponibilizar os resultados dos meus estudos. Não será tratada apenas uma tecnologia ou área, mas qualquer tópico que seja interessante e possa contribuir com a comunidade de desenvolvedores, comunidade científica e meus alunos. Entretanto, meus trabalhos sempre estão voltado principalmente para as tecnologias .NET, Java e C/C++.

Posts Recentes

Google Translator

JetBrains

JetBrains: Ferramentas de desenvolvimento com .NET.

ReSharper: Excelente ferramenta para .NET.