FITFramework for IntegratedTest
O FIT é uma ferramenta de automação e colaboração criada por WardCuningham que permite que várias pessoas envolvidas no projeto trabalhem juntas para a captura, a implementação e teste das regras do software.O que é
O FIT é uma ponte entre a manifestação de um requisito baseando-se em Test-DrivenDevelopment.Finalidades
Elementos Básicos
Uma “fixture” é uma classe que liga os dados de teste com o código que resolve os problemas de negócio (implementação).Com as fixtures, os dados de teste se tornam “executáveis” permitindo que as regras de negócio sejam validadas de maneira automatizada.Elementos Básicos (cont.)
Exemplo de fixture: DivisaoFixture, testando e direcionando o desenvolvimentopackageprofit.test; importprofit.application.DivisaoFacade;importfit.ColumnFixture; publicclassDivisaoFixtureextendsColumnFixture {public Double dividendo;public Double divisor;privateDivisaoFacade facade = newDivisaoFacade();public Double resultado() throws Exception {returnfacade.execute(dividendo, divisor);	}	}Elementos Básicos (cont.)
Elementos Básicos (cont.)Os dados para teste são colocados num documento HTML e geralmente em formato de tabela. O cabeçalho desta tabela indica a Fixture (uma classe) que será responsável por direcionar a construção e aplicar os teste.
Resultados do FIT
Nos resultados de teste podemos ver que os resultados corretos foram pintados de verde pelo FIT. Já na última linha, ocorreu um erro devidamente destacado pelo FIT em amarelo.Os testes são direcionados pelas tabelas com os dados de teste que constam num diretório do projeto.Resultados do FIT (cont.)
A FITLibrary, uma extensão muito útil do FIT, possui uma implementação que lê todo um diretório(FolderRunner) e executa os testes.Outra extensão, o FITNesse, permite a entrada dos dados para teste num Wiki próprio. Isso permite uma colaboração até maior com a área de negócios, melhorando a colaboração entre clientes e desenvolvedores.Extensões e Fixtures
O FIT e sua principal extensão, o FITNesse, possuem inúmeros estilos de fixture diferentes. As principais são:ColumnFixture – utilizada para testar regras e cálculos. (vide exemplo anterior)RowFixture – Para testar listas de objetos.ActionFixture – Para testar sequências de ações.Extensões e Fixtures (cont.)
Antes de tudo é aconselhável criar um projeto separado para os testes do FIT. Nesse projeto estarão contidos os HTML que a área de negócio irá construir e fixture que os programadores irão desenvolver, portanto, devido ao tamanho e complexidade é necessário criar um novo projeto.Por default o teste do FIT é gerado na fase de “integration-test” do ciclo de vida de construção do Maven(Build Lifecycle). Automatizando o teste do FIT com Maven
Para que possamos utilizar as fixtures, a classe que executa os testes (fit.FileRunner) e outros recursos torna-se necessário criar uma dependência do projeto com o “fitlibrary”. <dependencies>    <!-- FITLibrary -->    <dependency>    	<groupId>org.fitnesse</groupId>    	<artifactId>fitlibrary</artifactId>    	<version>20080812</version></dependency>  </dependencies>Configuração do pom.xml
Para incorporar os testes do FIT ao ciclo de vida do Maven é necessário, além de inserir o plugin “fit-maven-plugin”, uma configuração mínima da sua execução: as tags “outputDirectory” e “sourceDirectory”, respectivamente onde será gerado o resultado e onde estarão os HTML para execução dos testes.
É interessante configurar a tag “ignoreFailures” para true, a fim de que não seja interrompido a construção do projeto mesmo em caso de erro nos testes.Configuração do pom.xml (cont.)
<build>   <plugins><!-- FIT -->	<plugin>          <groupId>org.codehaus.mojo</groupId>          <artifactId>fit-maven-plugin</artifactId>          <executions>             <execution>                <phase>integration-test</phase>                <configuration>                   <outputDirectory>${basedir}/target/fit</outputDirectory>                   <sourceDirectory>${basedir}/src/main/fit</sourceDirectory>                   <sourceIncludes>**/test*.html</sourceIncludes>                   <ignoreFailures>true</ignoreFailures>                </configuration>                <goals>                   <goal>run</goal>                </goals>             </execution>          </executions>       </plugin>   </plugins></build>Configuração do pom.xml (cont.)

FIT - Framework for Integration Tests

  • 1.
  • 2.
    O FIT éuma ferramenta de automação e colaboração criada por WardCuningham que permite que várias pessoas envolvidas no projeto trabalhem juntas para a captura, a implementação e teste das regras do software.O que é
  • 3.
    O FIT éuma ponte entre a manifestação de um requisito baseando-se em Test-DrivenDevelopment.Finalidades
  • 4.
  • 5.
    Uma “fixture” éuma classe que liga os dados de teste com o código que resolve os problemas de negócio (implementação).Com as fixtures, os dados de teste se tornam “executáveis” permitindo que as regras de negócio sejam validadas de maneira automatizada.Elementos Básicos (cont.)
  • 6.
    Exemplo de fixture:DivisaoFixture, testando e direcionando o desenvolvimentopackageprofit.test; importprofit.application.DivisaoFacade;importfit.ColumnFixture; publicclassDivisaoFixtureextendsColumnFixture {public Double dividendo;public Double divisor;privateDivisaoFacade facade = newDivisaoFacade();public Double resultado() throws Exception {returnfacade.execute(dividendo, divisor); } }Elementos Básicos (cont.)
  • 7.
    Elementos Básicos (cont.)Osdados para teste são colocados num documento HTML e geralmente em formato de tabela. O cabeçalho desta tabela indica a Fixture (uma classe) que será responsável por direcionar a construção e aplicar os teste.
  • 8.
  • 9.
    Nos resultados deteste podemos ver que os resultados corretos foram pintados de verde pelo FIT. Já na última linha, ocorreu um erro devidamente destacado pelo FIT em amarelo.Os testes são direcionados pelas tabelas com os dados de teste que constam num diretório do projeto.Resultados do FIT (cont.)
  • 10.
    A FITLibrary, umaextensão muito útil do FIT, possui uma implementação que lê todo um diretório(FolderRunner) e executa os testes.Outra extensão, o FITNesse, permite a entrada dos dados para teste num Wiki próprio. Isso permite uma colaboração até maior com a área de negócios, melhorando a colaboração entre clientes e desenvolvedores.Extensões e Fixtures
  • 11.
    O FIT esua principal extensão, o FITNesse, possuem inúmeros estilos de fixture diferentes. As principais são:ColumnFixture – utilizada para testar regras e cálculos. (vide exemplo anterior)RowFixture – Para testar listas de objetos.ActionFixture – Para testar sequências de ações.Extensões e Fixtures (cont.)
  • 12.
    Antes de tudoé aconselhável criar um projeto separado para os testes do FIT. Nesse projeto estarão contidos os HTML que a área de negócio irá construir e fixture que os programadores irão desenvolver, portanto, devido ao tamanho e complexidade é necessário criar um novo projeto.Por default o teste do FIT é gerado na fase de “integration-test” do ciclo de vida de construção do Maven(Build Lifecycle). Automatizando o teste do FIT com Maven
  • 13.
    Para que possamosutilizar as fixtures, a classe que executa os testes (fit.FileRunner) e outros recursos torna-se necessário criar uma dependência do projeto com o “fitlibrary”. <dependencies> <!-- FITLibrary --> <dependency> <groupId>org.fitnesse</groupId> <artifactId>fitlibrary</artifactId> <version>20080812</version></dependency> </dependencies>Configuração do pom.xml
  • 14.
    Para incorporar ostestes do FIT ao ciclo de vida do Maven é necessário, além de inserir o plugin “fit-maven-plugin”, uma configuração mínima da sua execução: as tags “outputDirectory” e “sourceDirectory”, respectivamente onde será gerado o resultado e onde estarão os HTML para execução dos testes.
  • 15.
    É interessante configurara tag “ignoreFailures” para true, a fim de que não seja interrompido a construção do projeto mesmo em caso de erro nos testes.Configuração do pom.xml (cont.)
  • 16.
    <build> <plugins><!-- FIT --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>fit-maven-plugin</artifactId> <executions> <execution> <phase>integration-test</phase> <configuration> <outputDirectory>${basedir}/target/fit</outputDirectory> <sourceDirectory>${basedir}/src/main/fit</sourceDirectory> <sourceIncludes>**/test*.html</sourceIncludes> <ignoreFailures>true</ignoreFailures> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins></build>Configuração do pom.xml (cont.)