A Galeria de Fixtures também está disponível como documento PDF e um wiki FitNesse online. Acesse http://gojko.net/fitnesse/fixturegallery para mais informações.
Página anterior: CalculateFixture Próxima página: SequenceFixture Página acima: Fixtures da FitLibrary

DoFixture

DoFixture pode ser usada para descrever testes como estórias, quase como em Português puro. É uma substituta mais eficiente para ActionFixture e possui algumas funcionalidades ótimas como coordenação de flow mode (veja Flow Mode) e encapsulamento de objetos de domínio (veja System under test).

Formato da Tabela

A primeira linha da tabela lista o nome da classe da fixture. Todas as linhas depois desta são usadas para executar verificações ou executar ações através dos métodos existentes na fixture. O nome do método é construído juntando-se as células da linha. Os argumentos são definidos pelas células pares.

Se um método retorna um valor boolean a linha é considerada um teste e retornando FALSE vai fazer o teste falhar. Se o método for void ou retornar algo diferente de um valor boolean então este é executado sem nenhum efeito na saída do teste a não ser que uma exceção seja lançada.

!|DoFixtureTest|
|fill|10|times with|x|
|char at|4|is|x|
|set list|A,B,C,D|
|char at|2|is|C|

Classe da Fixture

A classe da fixture deve estender fitlibrary.DoFixture. Declare métodos públicos para todas as verificações e ações unindo as células ímpares para formar o nome do método e as células pares como argumentos. Você não precisa digitar os nomes dos métodos diretamente. Somente escreva a tabela, execute os testes para que estes falhem e então copie e cole o nome do método esperado que é impresso após a execução do teste.

Código-fonte em Java

package info.fitnesse.fixturegallery;
import java.util.Arrays;
import fitlibrary.DoFixture;

public class DoFixtureTest extends DoFixture {
	public String letters;
	public void fillTimesWith(int count,char c){
		char[] arr=new char[count];
		Arrays.fill(arr,c);
		letters=new String(arr);
	}
	public boolean charAtIs(int position, char c){
		return letters.charAt(position)==c;
	}	
	public void setList(char[] array){
		letters=new String(array);
	}
	public char charAt(int position){
		return letters.charAt(position);
	}	
}

Código-fonte em .NET

using System;
using System.Collections.Generic;
using System.Text;

namespace info.fitnesse.fixturegallery
{
    public class DoFixtureTest : fitlibrary.DoFixture
    {
        private String contents;
        public void FillTimesWith(int howmany, String what)
        {
            contents = "";
            for (int i = 0; i < howmany; i++)
            {
                contents = contents + what;
            }
        }
        public bool CharAtIs(int index, char c)
        {
            return contents[index]==c;
        }
        public void SetList(String[] strings)
        {
            contents = "";
            foreach (String s in strings)
            {
                contents = contents + s;
            }
        }
        //
        public char CharAt(int index)
        {
            return contents[index];
        }
    }
}

Código-fonte em Python

# NOTES:
#   This Fixture is not sensible in Python.
#   Python does not worry about character arrays, strings are used instead.
#   Therefore, a TypeAdapter for char is not supported by PyFIT.
#   I supplied one in this package

from fitLib.DoFixture import DoFixture
from info.fitnesse.fixturegallery.typeadapter import buildListTypeAdapterFor

class DoFixtureTest(DoFixture):
    _typeDict = {
        "letters": "String"
    }

    def __init__(self):
        DoFixture.__init__(self)
        self.letters = ""

    # JAVA: void fillTimesWith(int count,char c){
    _typeDict["fillTimesWith.types"] = [None, "Integer", "Char" ]
    def fillTimesWith(self, count, c):
        self.letters = c * count    #< FILL: Repeat char ``count`` times.

    # JAVA: boolean charAtIs(int position, char c){
    _typeDict["charAtIs.types"] = ["Boolean", "Integer", "Char" ]
    def charAtIs(self, position, c):
        return self.letters[position] == c

    # JAVA: void setList(char[] array){
    ARRAY_OF_CHAR_TYPE_ADAPTER = buildListTypeAdapterFor("Char")
    _typeDict["setList.types"] = [ None, ARRAY_OF_CHAR_TYPE_ADAPTER ]
    def setList(self, array):
        self.letters = "".join(array)

    # JAVA: char charAt(int position){
    _typeDict["charAt.types"] = [ "Char", "Integer" ]
    def charAt(self, position):
        return self.letters[position]

Código-fonte em Smalltalk

'From VisualWorks®, 7.6 of March 3, 2008 on June 27, 2008 at 3:36:34 pm'!


Info.Fitnesse.Fixturegallery defineClass: #DoFixtureTest
	superclass: #{Fitlibrary.DoFixture}
	indexedType: #none
	private: false
	instanceVariableNames: 'letters '
	classInstanceVariableNames: ''
	imports: ''
	category: ''!

!Info.Fitnesse.Fixturegallery.DoFixtureTest methodsFor: 'accessing'!

charAt: anInteger
	^letters at: anInteger + 1! !

!Info.Fitnesse.Fixturegallery.DoFixtureTest methodsFor: 'testing'!

charAt: anInteger is: aCharacter
	^(self charAt: anInteger) = aCharacter! !

!Info.Fitnesse.Fixturegallery.DoFixtureTest methodsFor: 'actions'!

fill: anInteger timesWith: aCharacter
	letters := String new: anInteger withAll: aCharacter!

setList: anArray
	letters := String withAll: anArray! !

!Info.Fitnesse.Fixturegallery.DoFixtureTest methodsFor: 'type access'!

signatureFor: aSymbol
	aSymbol == #fill:timesWith:
		ifTrue: [^MethodSignature with: Integer with: Character].
	aSymbol == #charAt:is:
		ifTrue:
			[^MethodSignature with: Integer with: Character returning: Boolean].
	aSymbol == #setList:
		ifTrue: [^MethodSignature with: (Array with: Character)].
	aSymbol == #charAt:
		ifTrue: [^MethodSignature with: Integer returning: Character]! !

Observações

DoFixture também suporta algumas palavras-chave que podem ser usadas como prefixo para o nome do método. Se uma dessas palavras-chave é usada, então as células pares são usadas para construir o nome do método. Células impares (exceto a primeira) são usadas como argumentos neste caso. Aqui estão algumas das palavras-chaves mais comuns:

  • reject inverte a lógica do teste, o que significa que retornando TRUE fará o teste falhar se a linha estiver usando reject como prefixo.
  • show imprime o valor do cálculo no resultado do teste (parecido com a célula vazia de uma ColumnFixture).
  • check permite verificar o resultado de um cálculo não-booleano. Inicie a linha com check e coloque o valor esperado no final da linha numa nova célula.
Na implementação Java de FIT, check e show mapeiam diretamente para propriedades de JavaBeans, então você não precisa usar o prefixo get . Contudo, estas palavras-chaves não podem ser usadas como atributos públicos da fixture. Na implementação .NET, você pode usá-las como propriedade ou métodos. Além disso você pode usar a palavra-chave set em .NET para definir um valor de um atributo ou propriedade.

!|DoFixtureTest|
|fill|10|times with|x|
|check|char at|4|x|
|set list|A,B,C,D|
|show|char at|2|

Utilização

Use DoFixture para descrever testes de workflow ou testes que não sigam uma estrutura repetitiva em particular. DoFixture é muito boa para coordenação de outras fixtures (veja Flow Mode).

Página anterior: CalculateFixture Próxima página: SequenceFixture Página acima: Fixtures da FitLibrary


Personal Tools