개발&Development/프로그래밍 일반

Zend Studio for Eclipse로 PHPUnit 놀이

겐도 2007. 10. 29. 01:15
http://www.zend.com/products/zend_studio/eclipse

Zend Studio가 연말쯤 새 버젼을 내면서 Eclipse를 기반으로 할 예정이라고 한다. 더불어 PHPUnit 개발자가 제안해서 PHPUnit의 지원을 제대로 해 준다. http://gendoh.com/2510973 을 할때 물론 PHPUnit 자체가 Test Skelecton 만들기를 제공해 주기는 하지만 커맨드 프롬프트에서 하는 건 역시 귀찮다. 역쉬 IDE에서 해야 :)

사용자 삽입 이미지

텍스트 큐브로 한번 장난을 쳐볼까 한다. 위의 링크에 있는 튜토리얼 동영상도 있겠지만 /lib/database.php에 있는 함수들을 테스트 해 보자. 텍스트큐브의 트렁크 파일들을 받아보자. (http://dev.textcube.org/svn/trunk) 그리고 편의상 /testsuit 란 폴더를 별도로 만든다.
사용자 삽입 이미지

/lib/database.php의 escapeString 함수에서 우클릭 후 위처럼 PHPUnit Test Case를 선택한다.
사용자 삽입 이미지

소스폴더를 변경해 주고 Finish. escapeSearchStringTest.php를 선택하고 Run/Run-as/PHPUnit Test(Alt+Shift+x, u)를 수행해 보자.
사용자 삽입 이미지

어렵쇼. -ㅅ-. 텍큐 현재 상태가 좀 모듈간의 디펜던시가 심하다. 예제도 그나마 적은 걸로 찾아본거지만 쉽지많은 않다.
require_once('components/Needlworks.DBMS.MySQL.php');
if (!function_exists('mysql_escape_string')) {
 function mysql_escape_string($string) {
  return str_replace(array("\x00","\n","\r","\\","'","\"","\x1a"),array("\\\x00","\\\n","\\\r","\\\\", "\\'","\\\"","\\\x1a"),$string);
 }
}

소스 상단에 위의 내용을 넣고 돌려보자.
사용자 삽입 이미지
정확히 고치려면 모듈화를 다시 수행하고 테스트시의 파일 연결을 어떻게 할까 고민해야 겠지만 여기서는 걍 돌게만 해보자. 최초의 테스트이니 구현되지 않았다고 궁시렁 거린다. 이제 제대로 짜봅시다.
 public function testEscapeSearchString()
 {
  // TODO Auto-generated escapeSearchStringTest->testEscapeSearchString
  $this->assertEquals(mysql_escape_string('\\'),'\\\\');
  $this->assertEquals(escapeSearchString('as_df%'),'as\\_df\\%');
  $this->assertEquals(escapeSearchString('as\\_df%'),'as\\\\\\_df\\%');
  $this->assertEquals(escapeSearchString('아이팟'),'아이팟');
 }

\의 개수때문에 정신 없지만 뭐 이정도는 해야 되겠죠. '아이팟'테스트는 특정 환경에서 '\'가 붙어버리는 버그를 확인하기 위한 케이스입니다. 돌리면 깔끔하게 떨어집니다.

Test Suite를 만드는 것은 별로 어렵지 않습니다. Suite은 Test Case를 한번에 돌려주는 역할이 전부입니다. 가능하면 Test케이스는 함수 혹은 클래스 단위로 만드는 것이 좋습니다. 그리고 그것을 Suite로 묶는 것이죠.
사용자 삽입 이미지

지금 비스타와 Neon이 살짝 맛이 갔는지 결과가 보이지 않습니다만 대충 돌고 있습니다. (둘다 아직 베타인게냐 -ㅅ-)

아직 Eclipse의 PDT에서는 PHPUnit이 완벽하게 연결이 되지 않습니다. PHPed와 Zend Studio for Eclipse 정도만 잘 되는 것 같습니다. 물론 위처럼 좀 삐거덕 하기는 합니다만. -ㅅ-

PHP를 쓰는 환경이라면 이 글을 기반으로 좀 찾아보길 권장하며 다른 환경이라도 Unit Test 환경을 준비해 보길 권장합니다. 이 작업의 이점은 최근 책들을 찾아보면 침이 마르도록 나올껍니다.

PS.
음 텍큐는... 음... 언제 하지 --? 시간나면. 아니면 티켓던지기 신공이나.. --?