본문 바로가기

Develop/CodeIgniter

[CodeIgniter] PHPUnit 적용

Test 파일에서 &get_instance()를 통해 객체를 받아온 후 사용해 주면 됨.


사용 예)


class PostTest extends PHPUnit_Framework_TestCase{
    private $CI;

    public function setUp(){
        $this->CI = &get_instance();
        $this->CI->load->database('testing');
    }

    public function testGetsAllPosts() {
        $this->CI->load->model('post');
        $posts = $this->CI->post->getAll();
        $this->assertEquals(1, count($posts));
    }
}


이렇게 작성을 해주게되면 해당 CI에서 test를 해줄 수 있음.


수정)

위처럼만 해주면 되는줄 알았는데 !...과정들이 더 필요함..

먼저 test 폴더내에 2개 파일이 필수임. phpunit.xml, bootstrap.php 이 두 파일을 통해

phpunit 시작점을 잡아줄 수 있음.


phpunit.xml




위와같이 작성해줌.


bootstrap.php


bootstrap.php


위 파일을 이용하는건데..흠..핵심은 ENVIROMENT를 testing으로 define 해준다는것!

이 값을 이용해 추후에 웹 output을 관리해줄 수 있음.


다음 단계로 hooking 설정을 해줘야함.

config.php에 들어가서 enable_hooks 값을 TRUE 로 해줌.

그런다음 hook.php에 다음을 추가해줌.


$hook['display_override'] = array(
    'class' => 'DisplayHook',
    'function' => 'captureOutput',
    'filename' => 'DisplayHook.php',
    'filepath' => 'hooks'
);

이는 이후에 나올 output 을 후킹해줄 클래스인 DisplayHook를 CodeIgniter에 등록하는 과정이라고 보면됨.

다음은 application/hooks/DisplayHook.php를 생성해줌. 해당 내용은 아래와 같음.


CI =& get_instance();
		$output = $this->CI->output->get_output();
		if (ENVIRONMENT != 'testing') {
			echo $output;
		}
	}
}

위와같으며 이때 &get_instance 함수는 CI를 사용해본 사람은 알듯..

위와 같은 설정이 모두 끝났다면..테스트 폴더에서


]#phpunit .

명령을 통해 실행해줌.이상 끝 !


첨부: GitHub에 존재하는 예제 파일.


phpfour-CodeIgniter-v2.0.3-246-g0db038b.zip


'Develop > CodeIgniter' 카테고리의 다른 글

Codeigniter + Vue  (0) 2018.03.15
[CodeIgniter] Rewirte Rule  (0) 2013.07.18
[CodeIgniter]index.php 없애기.  (0) 2012.08.07
[CodeIgniter] CI_Utf8 line:47 error  (0) 2012.05.18