DoFixture는 story-like test에 사용됩니다. ActionFixture 대신에 이 Fixture를 사용하실 수도 있습니다. 또한 ActionFixture에는 없는 다양한 기능들이 제공됩니다. flow-mode coordination이나 wrapping domain object 같은 것들이 그 예입니다.
Table Format
첫번째 줄은 fixture class 이름입니다. 그 이후의 모든 줄들은 verification을 실행하거나 fixture class의 메소드를 실행시킴으로서 어떤 일을 진행하도록 합니다. 메소드 이름은 그 줄의 홀수번째 cell들을 join 해서 만들어 집니다. argument 값들은 짝수번째 cell 들에서 가져오게 됩니다.
마약 메소드가 boolean 값을 반환한다면 그 줄은 테스트해야할 줄로 간주되고 FALSE를 반환하면 test fail로 간주 됩니다. 메소드가 void 거나 boolean 값 이외의 값을 반환하면 예외가 발생하지 않으면 그 메소드를 그대로 실행하게 됩니다.
!|DoFixtureTest| |fill|10|times with|x| |char at|4|is|x| |set list|A,B,C,D| |char at|2|is|C|
Fixture class
이 fixture를 사용하려면 fitlibrary.DoFixture를 extend 합니다. 모든 verification과 action들에 대해 public method를 정의합니다. 메소드 이름은 홀수번째에서 argument들은 짝수번째에서 가져 옵니다. 곧바로 메소드 이름을 타입할 필요는 없습니다. 테이블을 먼저 작성하고 그 다음에 테스트를 돌리세요. 처음에는 fail 하게 될 겁니다. 여기서 메소드 이름을 카피하시면 됩니다.
Java Source Code
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);
}
}
.NET Source Code
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];
}
}
}
Python Source Code
# 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]
Notes
DoFixture는 메소드 이름을 위해 prefix 될 수 있는 여러 키워드들을 제공합니다. 키워드가 사용되면 홀수번째 셀들이 메소드 이름으로 사용되게 됩니다. 짝수번째 셀들은 argument 값들이구요. 아래 일반적으로 사용되는 키워드들을 소개합니다.
- reject will invert the logic of a test, returning TRUE will make the test fail if the row is prefixed with reject .
- show will print out the value of a calculation in the test results (similar to an empty cell in ColumnFixture ).
- check allows you to verify results of non-boolean calculations. Prefix the row with check and put the expected value of the calculation on the end of the row, in a new cell.
자바 버전에서는 check 과 show 가 JavaBean 프로퍼티들과 곧바로 매핑 됩니다. 그러니까 get prifix를 사용하지 않으셔도 됩니다. 이런 키워드들은 public fields들로 사용될 수 없습니다. .NET 버전에서는 그것들을 field, 프로퍼티 그리고 메소드에 사용할 수 있습니다. 또한 .NET에서는 프로퍼티 값을 세팅하기 위해 set이라는 키워드를 사용하실 수도 있습니다.
!|DoFixtureTest| |fill|10|times with|x| |check|char at|4|x| |set list|A,B,C,D| |show|char at|2|
Usage
DoFixture는 workflow test나 어떤 특정한 반복 구조가 아닌 그런 테스트에 사용하실 수 있습니다. DoFixture는 다른 fixture들과 같이 coordinating 하는에 아주 유용합니다.
'TDD Project' 카테고리의 다른 글
| Hannah Anderson Dismisses Critics, Explains Relationship with James DiMaggio (0) | 2013.08.22 |
|---|---|
| ConstraintFixture,SetFixture,SubsetFixture Tutorial - FitLibrary - (0) | 2013.08.22 |
| CombinationFixture Tutorial - FitLibrary - (0) | 2013.08.22 |
| ArrayFixture Tutorial - FitLibrary - (0) | 2013.08.21 |
| SequenceFixture Tutorial - FitLibrary - (0) | 2013.08.21 |
| CalculateFixture Tutorials - FitLibrary - (0) | 2013.08.17 |
| SetUpFixture tutorial -FitLibrary- (0) | 2013.08.17 |
| Import Fixture Tutorial & Summery (FitNesse) (1) | 2013.08.17 |
| TableFixture Tutorial (FitNesse) (0) | 2013.08.14 |
| RowFixture Tutorial (Fitnesse) (0) | 2013.08.14 |
