단위테스트 Unit Testing Class¶
단위테스트는 소프트웨어 개발의 접근방법중 하나이며, 여러분의 프로그램내의 각 함수마다 테스트를 작성하는 것입니다. 이런 컨셉이 익숙하지않으시면 인터넷검색을 통해서 먼저 알아보시는 것이 좋습니다.
CodeIgniter의 단위테스트 클래스는 매우 심플하며, 검사 함수와 두 개의 결과 함수로 이루어져 있습니다. 또한 완전한 단위테스트 수트(suite)는 아니며, 여러분의 코드가 올바른 데이터형 및 올바른 결과를 생성하는지 검증하는 단순한 방법을 제공하는데 초점이 맞추어져 있습니다.
단위테스트 라이브러리 사용 Using the Unit Testing Library¶
클래스 초기화¶
다른 클래스들과 마찬가지로, 단위테스트 클래스도 컨트롤러에서 $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);
단위테스트의 결과 표시 Unit Test Display¶
단위 테스트의 결과는 다음 항목이 기본적으로 표시됩니다 :
- 테스트 이름 (test_name)
- 테스트 데이터 형식 (test_datatype)
- 예상하는 데이터 형식 (res_datatype)
- 결과 (result)
- 파일 이름 (file)
- 행 번호 (line)
- 사용자가 테스트에 입력한 메모 (notes)
$this->unit->set_test_items() 를 이용해서 어떤 항목이 표시될지 설정할 수 있습니다. 만약, 테스트 이름과 결과만을 표시하려면:
표시 테스트를 사용자 정의 Customizing displayed tests¶
$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);
Note
템플릿은 단위테스트를 수행하기 전에 선언되어야 합니다.
클래스 레퍼런스 Class Reference¶
- class CI_Unit_test¶
- set_test_items($items)¶
인수: - $items (array) – List of visible test items
반환값: void
테스트에서 볼 수 있어야 하는 항목의 목록을 설정합니다. 유효한 옵션은:
- test_name
- test_datatype
- res_datatype
- result
- file
- line
- notes
- run($test[, $expected = TRUE[, $test_name = 'undefined'[, $notes = '']]])¶
인수: - $test (mixed) – Test data
- $expected (mixed) – Expected result
- $test_name (string) – Test name
- $notes (string) – Any notes to be attached to the test
반환값: Test report
반환형: 문자열
단위 테스트 실행.
- report([$result = array()])¶
인수: - $result (array) – Array containing tests results
반환값: Test report
반환형: 문자열
이미 완료한 테스트에 대한 리포트를 생성합니다.
- use_strict([$state = TRUE])¶
인수: - $state (bool) – Strict state flag
반환형: void
테스트에서 엄격한 타입 비교 활성화/비활성화.
- active([$state = TRUE])¶
인수: - $state (bool) – Whether to enable testing
반환형: void
단위 테스트 활성화/비활성화.
- result([$results = array()])¶
인수: - $results (array) – Tests results list
반환값: Array of raw result data
반환형: array
원시 테스트 결과 데이터 반환.
- set_template($template)¶
인수: - $template (string) – Test result template
반환형: void
테스트 결과를 표시하기위한 템플릿을 설정.