2007년 7월 29일 일요일

SimpleTest(Unit Testing for PHP)

SimpleTest는 PHP에서 사용할 수 있는 Unit Testing 툴로서 이클립스 플러그인으로 사용할 수 있습니다.

설치하는 방법
  1. SimpleTest에서 이클립스 플러그인을 다운로드 받습니다.
  2. 적당한 장소에 다운로드 받은 소스의 압축을 풉니다.
  3. 이클립스를 실행시킨 다음에 Help > Software Updates > Find and install을 실행합니다.
  4. Search for new features to install > New Local Site을 클릭해서 설치할 프로그램의 위치를 설정합니다.

    사용자 삽입 이미지

  5. Finish를 눌러서 설치를 합니다. (설치가 완료된 후에 이클립스가 재시작됩니다.)
  6. 재시작한 이클립스에서 Window > Preferences를 클릭해서 Preferences 다이얼로그를 띄웁니다.
  7. SimpleTest항목을 찾은 다음에 PHP.exe file의 위치와 php.ini 파일의 위치, 그리고 Test File Suffix를 설정해줍니다. (Suffix를 설정하면 플러그인이 테스트 파일을 찾는데 도움을 줍니다. - 저의 경우에는 .test.php로 설정하였습니다.)
    사용자 삽입 이미지

  8. OK를 눌러서 창을 닫습니다.
사용하는 방법
PHP파일을 생성한 후 UnitTestCase를 상속받은 테스트 클래스를 작성해주면 됩니다. 테스트할 메소드는 test로 시작하여야만 됩니다.
<?php
    class test1 extends UnitTestCase {
        function test_pass(){
            $x = 1;
            $y = 2;
            $total = $x + $y;
            // 기대하는 결과값인 3과 메소드의 수행결과인 $total을 비교하여 비교치가
             // 다른 경우 세 번째 argument를 test fail과 함께 출력하게 됩니다.
            $this->assertEqual(3,$total, "This should pass");
        }
    }
?>
작성한 파일을 실행하기는 간단합니다. Run > Open Run Dialog를 띄운 다음에 SimpleTest를 실행시켜주거나 실행할 파일을 설정한 후 실행시켜주면됩니다.
사용자 삽입 이미지

※ 테스트를 추가하는 방법도 간단합니다. UnitTestCase를 상속받은 클래스에서 test...()를 추가하거나 UnitTestCase를 상속받는 테스트 클래스를 추가한 후 GroupTest를 생성하여 테스트가 가능합니다.
<?php
    class myGroupTest extends GroupTest {
        function myGroupTest() {
            parent::GroupTest('');
            $this->addTestFile(dirname(__FILE__).'/test1.php');
            $this->addTestFile(dirname(__FILE__).'/test2.php');
        }
    }
?>
※※ setUp() 메소드와 tearDown() 메소드를 사용하여 테스트 클래스가 로딩하기 전에 실행되는 작업을 수행하고, 테스트 종료한 다음에 마무리 작업을 수행할 수 있습니다. (다른 단위 테스트와 동일합니다.)

※※※ Mockup 생성도 가능합니다. Mockup을 생성하는 목적은 내부와 외부를 연결해주는 게이트웨이에 해당하는 부분을 만들 때 사용합니다.
// mock_objects를 포함시킵니다.
require_once('simpletest/mock_objects.php');

// Mockup으로 만들 클래스 파일이 따로 있다면 require_once를 호출하여 포함시킵니다.
// 또는 클래스를 동일 테스트 파일에 선언해줍니다. (인터페이스만 선언해주면 됩니다.)
...
// Mock 클래스를 생성합니다.
Mock::generate('Sample');

// 이렇게 생성된 Mock 클래스는 Mock~으로 시작되는 이름의 클래스로 생성할 수 있습니다.
sample = new MockSample();

// 생성된 클래스의 메소드가 호출될 때의 동작을 정의하기 위해서 expect
// 또는 setReturnReference() 를 사용하여서 어떤 메소드가 호출될 때 어떤
// 리턴결과가 돌아올지에 대해서 정의가 가능합니다.
sample->expect(...);
출처 :  SimpleTest  via Manning, PHP in Action(Objects, Design, Agility)- 9,10장

※ SimpleTest의 API는 여기로 -> http://simpletest.org/api/

댓글 없음:

댓글 쓰기