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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

RowFixture Tutorial (Fitnesse)

2013. 8. 14. 21:43 | Posted by 솔웅


반응형

RowFixture



RowFixture 는 객체들의 다이나믹한 리스트를 테스트합니다. Expected list (FitNesse Table)와 실제 결과 리스트 (fixture code로부터 도출된)를 비교하게 됩니다. 그리고 추가되고나 missing 된 아이템들을 report 하게 되는 거죠.

Table Format


테이블의 첫번째 줄은 fixture class 이름 입니다. 두번째 줄은 리스트 내의 객체들 구조를 나타내구요. (verify 하기를 원하는 프로퍼티들이나 메소드들이 되겠죠.). 그 이후에 나오는 줄들은 배열에 있는 expected objects 들입니다.

!include -seamless SetUpFixture

!|RowFixtureTest|
|name|post code|
|John Smith|SW4 66Z|
|Michael Jordan|NE1 8AT|


Fixture class


이 fixture class는 fit.RowFixture 를 extend 해야 하고 아래 두개의 메소드들을 오버라이드 해야 합니다.

  • getTargetClass — returns the Type or Class object representing the type of objects contained in the array.
  • query — returns the actual array of objects to be verified.
# section Java Source Code

Java Source Code

package info.fitnesse.fixturegallery;

import info.fitnesse.fixturegallery.domain.Player;
import fit.RowFixture;

public class RowFixtureTest extends RowFixture{
	public Class getTargetClass() {
		return Player.class;
	}
	public Object[] query() throws Exception {
			return Player.players.toArray();
	}
}

.NET Source Code

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

namespace info.fitnesse.fixturegallery
{
    public class RowFixtureTest: fit.RowFixture
    {
        public override Type GetTargetClass()
        {
            return typeof(Player);
        }
        public override object[] Query()
        {
            return Player.players.ToArray();
        }
    }
}

Python Source Code

from fit.RowFixture import RowFixture
from info.fitnesse.fixturegallery.domain.Player import Player

class RowFixtureTest(RowFixture):
    def getTargetClass(self):
        return Player

    def query(self):
        return list(Player.players) #< Return copy of players

Notes


그 객체가 identity (primary key 같은)의 한 부분이 되는 프로퍼티들을 가지고 있다면 그 프로퍼티들의 리스트들은 부가 정보 리스트들의 왼쪽에 놓여지게 됩니다. 이렇게 하면 error report를 보기가 훨씬 쉬워집니다. Figure 1을 봐 보세요. 두 클래스 모두 에러는 같습니다. 하지만 그 컬럼의 순서로 인해 하나는 주요 항목에 대한 에러를 알아보기가 쉽도록 보여주고 다른 하나는 모든 줄이 missing 되 버리게 됩니다.


Figure 1: RowFixture maps rows to objects from left to right



query method 다른 추가적인 argument들을 pass 하도록 허용하지 않습니다. 좀 더 자세한 정보를 보시려면 Fixture Arguments를 보세요.

리스트의 element들의 순서는 상호 의존적이지 않습니다. RowFixture 는 이를 무시할 겁니다.

Usage


객체들의 리스트를 verify 하려면 Use RowFixture 를 사용해서 테스트 하세요. 혹은 리스트 내의 모든 리스트들에 method를 만들어서 실행하셔도 됩니다. (이러면 번거롭겠죠?)


element 의 순서가 중요할 때는 이 RowFixture를 사용하지 마세요. 대신 ArrayFixture를 사용하세요.


반응형