반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

TableFixture Tutorial (FitNesse)

2013. 8. 14. 22:02 | Posted by 솔웅


반응형

TableFixture


TableFixture 는 FitNesse package의 additional class 입니다. (core FIT fixture set 에는 존재하지 않는 겁니다.  FitNesse와 같은 라이브러리의 한 부분으로서 다뤄지고 있습니다.). 반복적인 구조를 가지고 있지 않은 free-form table들을 실행시킬 때 사용합니다.

Table Format


TableFixture로 어떤 포맷인지 어떤 셀을 테스트할 것이지 등을 정하실 수 있습니다. 제한점이 있다면 첫번째 줄은 fixture의 클래스 이름이어야 한다는 것 뿐입니다. 나머지는 여러분 마음대로 하셔도 됩니다. 기존의 인보이스나 reports 혹은 document들을 FitNesse test로 바꿀 때 사용하실 수 있습니다. 아래 예제들은 Test Driven .NET Development with FitNesse 에서 가져온 것입니다. 인보이스를 세금계산으로 verify 하겠습니다.

!|TableFixtureTest|
|Item|Product code|Price|
|Pragmatic Programmer|B978-0201616224|34.03|
|Sony RDR-GX330|ERDR-GX330|94.80|
|Test Driven Development By Example|B978-0321146533|32.39|
|Net Total||161.22|
|Tax (10% on applicable items)||9.48|
|Total||170.70|


Fixture class


이 fixture class를 사용하려면  fitnesse.fixtures를 extend 해야 합니다. doStaticTable(int rows) method를 override 합니다. 그 메소드에서 getText(row, column)으로 관계된 cell들의 내용들을 추려내서 table을 process 하는 겁니다. test cell들을 right(row,column)로 correct 하거나 wrong(row,column,actualValue)로 incorrect 하도록 test cell들을 mark 하실 수 있습니다.

아래 예제는 아래에서부터 두번째 줄의 세번째 cell에 있는 값고 매치되는 인보이스로부터 total tax를 verify 하는 에제입니다.

Java Source Code

package info.fitnesse.fixturegallery;

import info.fitnesse.fixturegallery.domain.TaxCalculator;
import fitnesse.fixtures.TableFixture;

public class TableFixtureTest extends TableFixture{
	protected void doStaticTable(int rows) {
		 TaxCalculator tc=new TaxCalculator();
	      double totaltax = 0;

	      for (int row = 1; row < rows - 3; row++)
	      {
	        totaltax += tc.GetTax(getText(row, 1),
	          Double.parseDouble(getText(row, 2)));
	      }
	      double taxintable = Double.parseDouble(getText(rows - 2, 2));
	      if (taxintable == totaltax)
	        right(rows - 2, 2);
	      else
	        wrong(rows - 2, 2,String.valueOf(totaltax));
	    }
}


.NET Source Code

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

namespace info.fitnesse.fixturegallery
{
    public class TableFixtureTest : global::fitnesse.fixtures.TableFixture
    {
        protected override void DoStaticTable(int rows)
        {
            TaxCalculator tc = new TaxCalculator();
            decimal totaltax = 0;
            for (int row = 1; row < rows - 3; row++)
            {
                totaltax += tc.GetTax(GetString(row, 1),
                  Decimal.Parse(GetString(row, 2)));
            }
            decimal taxintable = Decimal.Parse(GetString(rows - 2, 2));
            if (taxintable == totaltax)
                Right(rows - 2, 2);
            else
                Wrong(rows - 2, 2, totaltax.ToString());
        }
    }

}

Python Source Code

from info.fitnesse.fixturegallery.domain.TaxCalculator import TaxCalculator
from fitnesse.fixtures.TableFixture import TableFixture

class TableFixtureTest(TableFixture):
    def doStaticTable(self, rows):
        tc = TaxCalculator()
        totalTax = 0.0

        for row in range(1, rows - 3):
            totalTax += tc.getTax(self.getText(row, 1),
                                  float(self.getText(row, 2)))

        taxinTable = float(self.getText(rows - 2, 2))
        if taxinTable == totalTax:
            self.right(self.getCell(rows - 2, 2))
        else:
            self.wrong(self.getCell(rows - 2, 2), str(totalTax))

Notes


정수형으로 변환된 cell 값을 retrieve 할 때 getInt 를 사용하시면 됩니다.

Usage


다른 fixture type으로는 구현하기 힘든 특정 business-specific table 포맷에 대해서 테스트 하기를 원하신다면 이 TableFixture를 사용하시는게 좋습니다. HTML table로 export 될 수 있는 문서를 가지고 있다면 더 쉽게 테스트를 구현하실 수 잇습니다. 그 HTML을 FitNesse로 곧바로 붙여넣기 하면 될 테니까요.


반응형