Trace: » argumentosparafixtures » webtest » actionfixture » calculatefixture » fixturesbasicasdefit » conceitosimportantes » simbolosemfixtures » rowfixture » sequencefixture » dofixture
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:
rejectinverte a lógica do teste, o que significa que retornandoTRUEfará o teste falhar se a linha estiver usandorejectcomo prefixo.showimprime o valor do cálculo no resultado do teste (parecido com a célula vazia de umaColumnFixture).checkpermite verificar o resultado de um cálculo não-booleano. Inicie a linha comchecke coloque o valor esperado no final da linha numa nova célula.
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
