A Magia dos Testes Automatizados.
28/08/2011 Deixe um comentário
A parte final dos três posts falando sobre testes. Vamos ver uma poderosa ferramenta de automação que é o Apache Ant.
O ANT trabalha através de tarefas, que são especificadas através de um arquivo XML chamado buildfile, onde ao editamos este arquivos definindo as tarefas que desejamos que ele faça, como por exemplo:
Criarmos pastas no sistema operacional, pastas que poderemos usar por exemplo para colocar os executáveis da aplicação que estamos desenvolvendo;
Compilarmos recursivamente todos os fontes na pasta dos arquivos fontes de nosso projeto, colocando na pasta dos executáveis;
Copiarmos arquivos, deletarmos arquivos, listarmos arquivos;
Fazer conexões com bancos de dados, utilizarmos comandos do sistema, fazer log de nossos projetos, dentre várias outras tarefas.
O que demonstrarei é como o Ant automatiza tarefas necessárias para que sua aplicação esteja pronta para a implantação, distribuição, etc. Nesse post, abordaremos as seguintes tarefas a serem executadas:
-
Deleção e criação de diretórios.
-
Definir as libs que serão incluídas no projeto.
-
Compilar suas classes.
-
Definir seus testes e executá-los.
- E o objetivo final, que é gerar o arquivo .war.
Aproveitando a estrutura do projeto já desenvolvido nos outros posts, <link aqui referenciando os posts antigos>vamos criar o arquivo build.xml na raiz do projeto. A estrutura do arquivo xml segue uma estrutura uniforme, mais ou menos dessa forma:
<project name="nome_projeto" basedir="." default="alvo1"> <target name="alvo1"> <tarefa1 /> <tarefa2 /> </target> <target name="alvo2"> <tarefa1 /> <tarefa2 /> </target> <target name="alvo3"> <tarefa1 /> </target> </project>
Os elementos filhos, que são os target, e neles podem possuir uma ou mais tarefas(tasks) a serem executadas (novamente – criar, renomear ou excluir diretórios, compilar e empacotar arquivos, etc. ).
Pois bem, vamos ao “jeitão” do nosso XML. Vamos listar as tarefas que serão executadas e algumas particularidades:
<path id="classpath"> <pathelement location="${classes.dir}" /> <fileset dir="${lib.root}"> <include name="*.jar" /> </fileset> </path>
<target name="clean"> <delete dir="${target.dir}"/> <mkdir dir="${classes.dir}"/> <mkdir dir="${test.classes.dir}"/> </target>
<target name="compile" depends="clean"> <javac srcdir="${basedir}" destdir="${classes.dir}" > <classpath> <path refid="classpath"/> </classpath> </javac> <!-- Compila Test classes --> <javac destdir="${test.classes.dir}" srcdir="${test.source.dir}"> <classpath> <path refid="classpath"/> </classpath> </javac> </target>
<target name="teste" depends="test-mysql"> <mkdir dir="${test.report.dir}"/> <junit printsummary="on" fork="no" haltonfailure="true" haltonerror="true"> <sysproperty key="basedir" value="." /> <formatter type="xml" /> <classpath refid="classpath"/> <batchtest todir="${test.report.dir}"> <!-- Unit Tests --> <fileset dir="${test.source.dir}/unit"> <include name="${test.source.dir}/unit/${test.pattern}" /> </fileset> <!-- Integration Tests --> <fileset dir="${test.source.dir}/integration"> <include name="${test.source.dir}/integration/${test.pattern}" /> </fileset></p> </batchtest> </junit> </target>
<target name="buildwar" depends="teste"> <javac srcdir="${basedir}" destdir="${classes.dir}"> <classpath refid="classpath"/> </javac> <mkdir dir="${war.dir}" /> <war destfile="${war.dir}/VRaptorTestesAutomatizados.war" webxml="${web.xml}"> <classes dir="${classes.dir}" /> <lib dir="${lib.root}"></lib> <fileset dir="WebRoot/"> <include name="META-INF/**"/> <include name="*.jsp" /> <include name="*.html" /> </fileset> </war> </target>