단위테스트 Unit Testing Class
단위테스트는 소프트웨어 개발의 접근방법중 하나이며, 여러분의 프로그램내의 각 함수마다 테스트를 작성하는것입니다. 이런 컨셉이 익숙하지않으시면 인터넷검색을 통해서 먼저 알아보시는것이 좋습니다.
CodeIgniter의 단위테스트 클래스는 매우 심플하며 ,검사함수와 두개의 결과함수로 이루어져 있습니다.또한 완전한 단위테스트 수트(suite)는 아니며 ,여러분의 코드가 올바른 데이터형 및 올바른 결과를 생성하는지 검증하는 단순한 방법을 제공하는데 초점이맞추어져 있습니다.
클래스 초기화 Initializing the Class
다른 클래스들과 마찬가지로 , 단위테스트 클래스도 컨트롤러에서 $this->load->library 함수를 통해 초기화 합니다:
$this->load->library('unit_test');
일단 로드되면 단위테스트 객체는 $this->unit 로 사용하실 수 있습니다.
테스트 실행 Running Tests
아래 나오는 함수에 테스트와, 예상되는 결과를 넘겨주는것으로 테스트를 실행할수 있습니다:
$this->unit->run( test, expected result, 'test name', 'notes');
test 는 여러분이 테스트하기를 위하는 코드의 결과이며, expected result 는 예상하는 결과(혹은 데이터형), 그리고 test name 은 선택사항으로서 여러분의 테스트에 이름을 부여할때 사용합니다.또한 메모를 입력하고 싶다면 notes 부분에 입력하세요.
예:
$test = 1 + 1;
$expected_result = 2;
$test_name = 'Adds one plus one';
$this->unit->run($test, $expected_result, $test_name);
글자그대로 일치하는것을 검사하는지 데이터형이 일치하는것을 검사하는지에 따라서 ' 예상되는 결과'부분은 달라집니다.
아래는
글자그대로가 일치하는지 검사합니다:
$this->unit->run('Foo', 'Foo');
아래는 데이터형이 일치하는지를 검사합니다:
$this->unit->run('Foo', 'is_string');
두번째 파라미터로"is_string"을 사용했다는걸 아실수 있겠지요 .이것은 테스트(test)가 문자열을 결과로 생성하는지 여부를 검증해라 라고 하는것과 같습니다.
아래는 각 타입별 파라미터값입니다
:
- is_object
- is_string
- is_bool
- is_true
- is_false
- is_int
- is_numeric
- is_float
- is_double
- is_array
- is_null
리포트 생성 Generating Reports
여러분은 테스트결과를 각 테스트수행후 볼수도 있고, 여러개의 테스트를 수행한후 마지막으로 리포트를 생성하게 할수도 있습니다. 직접적이고 심플하게 리포트를 표시하려면 run를 echo 나 return 하시면 됩니다:
echo $this->unit->run($test, $expected_result);
모든테스트에 대한 전체 리포트를 보시려면 아래와같이 합니다:
echo $this->unit->report();
리포트는 HTML 테이블 형태로 생성됩니다. 만약 원래데이터만 보시려면 아래함수로 배열을 추출해 낼 수 있습니다:
echo $this->unit->result();
엄격 모드 Strict Mode
기본값으로, 단위테스트클래스는 '글자그대로일치'를 느슨하게 검사합니다. 아래 예제를 보세요:
$this->unit->run(1, TRUE);
테스트는 정수를 검사하나, 예상되는 값으로는 불린(boolean) 값을 넘겨주었습니다. 그러나 , PHP의 느슨한 데이터형 설정(data-typing) 때문에 일반적인 일치테스트를 사용하게되어 위 결과는 TRUE 가 됩니다:
if (1 == TRUE) echo 'This evaluates as true';
원한다면 단위테스트클래스를 엄격모드로 설정할수 있습니다. 그러면 데이터형과 값을 동시에 검사합니다.:
if (1 === TRUE) echo 'This evaluates as FALSE';
엄격모드를 활성화 하려면 아래와 같이 합니다:
$this->unit->use_strict(TRUE);
단위테스트 활성/비활성화 Enabling/Disabling Unit Testing
테스트 코드를 프로그램안에 남겨두되 , 원할때만 수행되도록 하려면, 아래함수를 사용하여 테스팅을 비활성화 할수 있습니다:
$this->unit->active(FALSE)
단위 테스트의 결과 표시
단위 테스트의 결과는 다음 항목이 기본적으로 표시됩니다 :
- 테스트 이름 (test_name)
- 테스트 데이터 형식 (test_datatype)
- 예상하는 데이터 형식 (res_datatype)
- 결과 (result)
- 파일 이름 (file)
- 행 번호 (line)
- 사용자가 테스트에 입력한 메모(notes)
테스트 결과 표시 설정
$this->unit->set_test_items(array('test_name', 'result'));
템플릿 제작 Creating a Template
테스트결과의 포멧을 기본설정과 다르게 하고싶다면 직접 템플릿을 작성하실 수 있습니다.여기 간단한 템플릿 예제가 있습니다 . 반드시 필요한 모조변수(pseudo-variables)에 주의하세요:
$str = '
<table border="0" cellpadding="4" cellspacing="1">
{rows}
<tr>
<td>{item}</td>
<td>{result}</td>
</tr>
{/rows}
</table>';
$this->unit->set_template($str);
참고: 템플릿은 단위테스트를 수행하기전에 선언되어야 합니다.