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.