'테스트 주도개발'에 해당되는 글 1건

  1. 2014.06.22 TDD를 위한 Library: Toast - Unit Testing for CodeIgniter

오늘은 PHP로 웹서비스 개발시, 테스트를 도울 수 있는 라이브러리에 대해 소개하겠습니다.

이 라이브러리를 사용하려면 CodeIgniter 프레임워크 환경이 필요합니다.


1. CodeIgniter 란?

CodeIgniter(이하 CI)란 PHP를 이용하여 웹사이트를 개발하는 사람들을 위한 도구 모음입니다. CI는 일반적 작업에서 사용되는 다양한 라이브러리를 제공하며, 논리적이고 쉬운 인터페이스를 갖추고 있어서 최소코드로 생산성을 높여줄 수 있는 오픈 소스 프레임워크 입니다.

CI는 매우 가볍고, 빠릅니다(라고 개발사에서는 말합니다). 

M-V-C 패턴에 기반을 둔 CI는 비지니스 로직 계층과 표현 계층이 분리되어있어서 명확한 구조를 유지하지만, 유연성이 좋으므로 프로그램이 복잡해지면 품질관리를 하기가 어렵다고 합니다. 하지만 품질 관리하기 위한 테스트 적용이 쉬운 구조 또한 M-V-C 패턴이라고 하는데요. 최근 TDD(Test Driven Development) 가 부상하면서 테스트의 중요성이 주목받고 있는 시점에, CI는 TDD를 가능하게 하는 프레임 워크라고 할 수 있습니다.

CI는 기본적으로 Unit Test Library가 제공이 되고 있지만, 다음에 소개할 라이브러리는 좀 더 깔끔한 인터페이스와 쉬운 사용법을 가능하게 합니다.


그럼 이제 라이브러리에 대해 알아볼까요?

2. Toast란?

Toast는 CI를 사용하여 개발할때 TDD를 위한 Unit Test Library입니다. 

현재 1.5ver.까지 나와있고, CI 1.7.X 기준으로 작성된 라이브러리 입니다.

홈페이지 : http://jensroland.com/projects/toast/

밑에 자료는 CI2.X기준으로 수정된 버전입니다. (http://www.cikorea.net 에 올라와져있는 자료입니다.)


2.1. 설치방법

1) 공식 홈페이지(CI 1.7X) 또는 한국 CI사용자 포럼(CI 2.X)에서 다운로드 하신 후 압축을 풀어주세요.

2) CI 프로젝트에서 application폴더 하위에 있는 controller와 view폴더 밑에 업로드 합니다.

/app/controllers/test

/app/views/test

3) 브라우저에서 실행하면 끝.


2.2  실행방법 및 예시테스트

테스트 class를 실행하고 싶으면, class이름을  브라우저에  적어주면 됩니다.

http://www.example_mydomain.com/test/my_test_class


테스트 class중에 개별 function 테스트를 하고 싶으면, class이름과 function이름의 붙어있는 prefix인 
'test_'를 뺀 부분을 브라우저에 적어주면 됩니다.

http://www.example_mydomain.com/test/my_test_class/some_action


'test/' 폴더 안에 있는 전체 테스트 class를 실행시키고 싶으시면, Toast_all controller를 브라우저에
적어주면 됩니다. (간혹 버전에 따라 toast_all로 실행이 안될수도 있습니다.그럴때는 Toast_all로 실행해 보세요.)

http://www.example_mydomain.com/test/toast_all


음은 1개의 테스트 class를 실행시킨 예시 스크린샷 입니다.


3. 마무리 하면서...

물론 CI의 내장 단위테스트 라이브러리가 있긴 하지만, 제작자의 말대로 

1) 가벼우면서 기존CI를 저해하지 않고,  

2) CI와 완벽통합되고,

3) JUnit 스타일이면서,

4) 웹브라우저를 통한 테스트를 하며,

5) 개별 또는 통합테스트가 가능한

라이브러리 입니다.

실제 사용했을때 매우 간단한 방법으로 여러개의 테스트를 일괄적으로 할 수 있고,
여러가지의 경우를 테스트 빠르게 할 수 있어서 매우 만족했습니다.
CI환경에서의 TDD를 시도하신다면 정말 강추할만한 라이브러리 입니다.  



Reference: 

CodeIgniter Korea 
http://www.cikorea.net/source/view/618/page/1

공식홈페이지
http://jensroland.com/projects/toast/

Posted by jjangAh