20 de mai. de 2011

Como usar o log4j nos testes unitários

Esta é uma dica muito importante quando é necessário criar classes de testes para o seu projeto. Desta forma conseguimos
verificar no console utilizado para o próprio Maven ou até mesmo em um arquivo o prosseguimento dos testes.

O primeiro passo deste exemplo é a criação do projeto basicamente. Estou usando como exemplo o projeto em Maven em 5 Minutos.
Após criar o projeto conforme explicado no link será necessário alterar o pom.xml e criar o arquivo log4.properties.


Arquivo de configuração do Log4j


Crie um arquivo log4.properties na pasta src\test\resources e inclua o seguinte trecho de código:
log4j.logger.br.com=DEBUG, rolling1
# Console Append  
log4j.appender.rolling1=org.apache.log4j.ConsoleAppender    
log4j.appender.rolling1.layout=org.apache.log4j.PatternLayout    
log4j.appender.rolling1.layout.ConversionPattern=%d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p %c{2}.%M - %m%n 

 


Alteração do pom.xml



Inclua a dependência do Log4j:

<dependency>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 <version>1.2.16</version>
 <type>jar</type>
</dependency>

Inclua a configuração do plugin maven-surefire-plugin para que seja possível usar o log4j nos testes unitários:

<build>
 <plugins>
  <plugin>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.8.1</version>
   <configuration>
    <systemProperties>
     <property>
      <name>maven.junit.sysproperties</name>
      <value>log4j.configuration</value>
     </property>
     <property>
      <name>log4j.configuration</name>
      <value>file:target/test-classes/log4j.properties</value>
     </property>
    </systemProperties>
    <includes>
     <include>**/*Test.java</include>
    </includes>
   </configuration>
  </plugin>
 </plugins>
</build>


O novo arquivo pom.xml deve ficar semelhante ao código abaixo após todas as alterações:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>br.com.maven3.tutorial</groupId>
 <artifactId>projeto.exemplo</artifactId>
 <packaging>jar</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>projeto.exemplo</name>
 <url>http://maven.apache.org</url>
 <dependencies>
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>3.8.1</version>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.16</version>
   <type>jar</type>
  </dependency>
 </dependencies>
 <build>
  <plugins>
   <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.8.1</version>
    <configuration>
     <systemProperties>
      <property>
       <name>maven.junit.sysproperties</name>
       <value>log4j.configuration</value>
      </property>
      <property>
       <name>log4j.configuration</name>
       <value>file:target/test-classes/log4j.properties</value>
      </property>
     </systemProperties>
     <includes>
      <include>**/*Test.java</include>
     </includes>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>


 



Alteração da Classe de Testes




No exemplo que acabamos de criar já foi criado também a classe AppTest em src\test\java\br\com\maven3\tutorial.

 
Altere a classe para o conteúdo abaixo:

package br.com.maven3.tutorial;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.log4j.Logger;
/**
 * Unit test for simple App.
 */
public class AppTest extends TestCase {
 static Logger logger = Logger.getLogger(AppTest.class);
 /**
 * Create the test case
 * 
 * @param testName
 *            name of the test case
 */
 public AppTest(String testName) {
  super(testName);
 }
 /**
 * @return the suite of tests being tested
 */
 public static Test suite() {
  logger.info("return new TestSuite( AppTest.class )");
  return new TestSuite(AppTest.class);
 }
 /**
 * Rigourous Test :-)
 */
 public void testApp() {
  logger.info("assertTrue( true )");
  assertTrue(true);
 }
}



Após os procedimentos acima basta executar o comando mvn test.

Pronto, já temos um projeto com testes unitários configurado corretamente no Maven!

 
Pesquisa personalizada

0 comentários:

Postar um comentário

Leia as regras:
Todos os comentários são lidos e moderados previamente.
Apenas os que respeitam as regras abaixo serão publicados:
- o comentário deve estar relacionado ao assunto do post
- não serão aceitos palavrões e ofensas ao redator do blog ou a terceiros
- não inclua links desnecessários no conteúdo do comentário
- se quiser deixar sua url, comente com a opção OpenId
Obs.: os comentários dos leitores não refletem a opnião do blog.