단위테스트 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

테스트 결과를 표시하기위한 템플릿을 설정.