CodeIgniter User Guide Version 2.1.0


단위테스트 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)가 문자열을 결과로 생성하는지 여부를 검증해라 라고 하는것과 같습니다.
아래는 각 타입별 파라미터값입니다 :

리포트 생성 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)

단위 테스트의 결과 표시

단위 테스트의 결과는 다음 항목이 기본적으로 표시됩니다 :

$this->unit->set_items()를 이용해서 어떤 항목이 표시될지 설정할 수 있습니다.만약, 테스트 이름과 결과만을 표시하려면 :

테스트 결과 표시 설정

$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);

참고: 템플릿은 단위테스트를 수행하기전에 선언되어야 합니다.