Fitnesse에 대해서 공부하려고 하는데 검색을 해 봐도 별로 맘에 드는 블로그를 못 찾겠네요. 그래서 Fitnesse 홈페이지에 있는 Tutorial을 한번 쪽 훑어 보겠습니다.
기초적인 Research는 된 것 같아서 Fixture에 대한 부분을 살펴 봅니다.
여기로 가시면 Tutorial 원문을 보실 수 있습니다.
ColumnFixture
ColumnFixture 는 table 의 컬럼들을 곧바로 fixture class의 프로퍼티와 메소드 그리고 필드들로 매핑합니다. 이는 같은 테스트가 다양한 입력 argument들에 대해 반복적으로 사용되어야 할 때 반복적으로 사용되는 변수들을 만들 때 아주 유용합니다.
Table Format
테이블의 첫번째 줄(row)는 테스트 클래스의 이름입니다. 두번째 row의 컬럼 이름들은 이 컬럼과 관계된 필드나 메소드를 가리킵니다. Output 값들은 반드시 필드나 메소드 이름 다음에 ? 나 ()를 를 붙여야 합니다. 그 이후의 row들은 input argument들과 기대되는 결과값(output arguments)들의 combination list들 입니다.
!|info.fitnesse.fixturegallery.ColumnFixtureTest| |firstPart|secondPart|together?|totalLength?| |Hello|World|Hello, World|10| |Houston|We Have a Problem|Houston, We Have a Problem|24|
Fixture class
fixture 클래스는 fit.ColumnFixture를 extend 해야 합니다. 그리고 테이블의 두번째 줄과 매치되는 public field들과 메소드들을 선언합니다.
Java Source Code
package info.fitnesse.fixturegallery; import fit.ColumnFixture; public class ColumnFixtureTest extends ColumnFixture { public String firstPart; public String secondPart; private int length; public String together(){ length=firstPart.length()+secondPart.length(); return firstPart+ ", "+secondPart; } public int totalLength(){ return length; } }
.NET Source Code
using System; using System.Collections.Generic; using System.Text; namespace info.fitnesse.fixturegallery { public class ColumnFixtureTest: fit.ColumnFixture { public String firstPart; public String secondPart; public String Together { get { return firstPart + ", " + secondPart; } } public int TotalLength() { return firstPart.Length+secondPart.Length; } } }
Python Source Code
from fit.ColumnFixture import ColumnFixture class ColumnFixtureTest(ColumnFixture): _typeDict = { "firstPart": "String", "secondPart": "String" } def __init__(self): ColumnFixture.__init__(self) self.firstPart = "" self.secondPart = "" # JAVA: public String together(){ _typeDict["together"] = "String" def together(self): return "%s, %s" % (self.firstPart, self.secondPart) # JAVA: public int totalLength(){ _typeDict["totalLength"] = "Integer" def totalLength(self): return len(self.firstPart) + len(self.secondPart)
Notes
자바버전에서는 클래스 필드들은 오직 input으로 사용되고 클래스 메소드들은 output으로 사용될 수 있습니다. JavaBean 프로퍼티들은 직접적으로 support 되지는 않습니다. (getter들이 output method들의 역할을 할 겁니다. 여러분은 getCreditLimit와 같은 전체 메소드 이름을 명시해야 합니다. .NET 버전에서는 필드들과 프로퍼티들이 input과 output들로 사용될 수 있습니다. 게다가 파라미터가 없는 메소드들도 output으로 사용될 수 있습니다. Java implementation은 대소문자 구분을 합니다. (case sensitive) .NET 버전은 프로퍼티 이름들에 대소문자 구분을 무시합니다.
table row들은 top-down 으로 실행됩니다. cell들도 왼쪽에서 오른쪽으로 실행되구요. 만약 row들이 실행되는 사이에 어떤 특별한 cleanup을 해야 한다면 reset() 메소드를 override하시면 됩니다.
.NET 버전은 ColumnFixture 로 domain object들을 감쌉니다. 이렇게 하면 fixture내의 도메인 object들의 프로퍼티들과 메소드들을 재선언 하지 않고 ColumnFixture 를 사용할 수 있도록 해 줍니다. Target objects로 가시면 좀 더 자세한 내용을 보실 수 있습니다.
output cell 을 empty로 놔두면 아무것도 테스트 하지 않고 현재의 값이 표시 됩니다.
Usage
ColumnFixture 는 calculation-based business rule들과 state machine들에 대해 테스트를 만들 떄 적합합니다. 같은 타입의 calculation이 다른 input 값들을 받아서 결과를 테스트하는 작업을 할 때 아주 유용합니다.
만약 테스트가 반복적이지 않다면 ColumnFixture 를 사용하는 것이 아주 좋은 방법이 아닐 수 있습니다. DoFixture (see DoFixture )를 한번 고려해 보세요. 만약 object들의 다이나믹한 리스트를 테스트하시려면 ArrayFixture (see ArrayFixture) 나 RowFixture 를 사용하세요. 이 Fixture들은 contents들도 verify 하거든요.
사람들은 가끔 이 ColumnFixture
를 잘 못 사용하기도 합니다. 특히 domain object나 데이터베이스에 record들을 insert 할 때 말이죠. 이를 위해서는 테이블의 마지막 칼럼에서 Create 를 call 함으로서 추가적인 메소드를 실행시킵니다. 이 메소드는 OK 같은 status code를 return 합니다. 이것은 creation에 대한 비지니스 룰을 체크하기를 원할 때 사용하면 좋습니다. 다른 테스트들의 stage를 준비하기를 원하신다면 SetUpFixture (see SetUpFixture )를 사용하면 좋습니다. 이 Fixture는 test page를 좀 더 가독성 있도록 해 줍니다. 또한 코드량도 줄일 수 있습니다.
'TDD Project' 카테고리의 다른 글
SetUpFixture tutorial -FitLibrary- (0) | 2013.08.17 |
---|---|
Import Fixture Tutorial & Summery (FitNesse) (0) | 2013.08.17 |
TableFixture Tutorial (FitNesse) (0) | 2013.08.14 |
RowFixture Tutorial (Fitnesse) (0) | 2013.08.14 |
ActionFixture Tutorial (Fitnesse) (0) | 2013.08.14 |
Spring Framework에서 jUnit 테스트 만들기 - Mockito 를 중심으로 - (0) | 2013.08.11 |
Fitnesse 사용법 간단 정리 (0) | 2013.08.07 |
Mockito로 테스트 하기 (0) | 2013.06.17 |
jUnit 으로 Private Method 테스트 만들기 2 (0) | 2013.06.10 |
jUnit 으로 Private Method 테스트 만들기 (0) | 2013.06.10 |