2008-09-12 5 views
3

PHPUnit을 사용하여 웹 사이트를 테스트하는 방법을 배우기 시작했습니다. 내가 겪고있는 문제는 다섯 가지 사용자 유형이 정의되어 있고 다른 유형의 모든 클래스를 테스트 할 수 있어야한다는 것입니다. 현재 사용자 클래스가 있고이 함수를 각 함수에 전달하고 싶지만이 메서드를 전달하거나 올바른지 아닌지 다른 오류를 테스트하는 방법을 알 수는 없습니다.PHPUnit을 사용하여 여러 사용자 유형으로 웹 사이트를 테스트하는 가장 좋은 방법

편집 : 나는해야만합니다. 사용자 클래스가 있고이 클래스의 다른 인스턴스를 각 단위 테스트에 전달하려고합니다.

답변

2

다양한 사용자 클래스가 상위 사용자 클래스 , 그렇다면 테스트 케이스 클래스에 대해 동일한 상속 구조를 사용하는 것이 좋습니다. 당신은 당신의 테스트 케이스 클래스로 다음을 수행 할 수

class User 
{ 
    public function commonFunctionality() 
    { 
     return 'Something'; 
    } 

    public function modifiedFunctionality() 
    { 
     return 'One Thing'; 
    } 
} 

class SpecialUser extends User 
{ 
    public function specialFunctionality() 
    { 
     return 'Nothing'; 
    } 

    public function modifiedFunctionality() 
    { 
     return 'Another Thing'; 
    } 
} 

:

는 다음 샘플 클래스 고려 각 테스트가 재정의 할 수있는 작성 방법에 의존하기 때문에

class Test_User extends PHPUnit_Framework_TestCase 
{ 
    public function create() 
    { 
     return new User(); 
    } 

    public function testCommonFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Something', $user->commonFunctionality); 
    } 

    public function testModifiedFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('One Thing', $user->commonFunctionality); 
    } 
} 

class Test_SpecialUser extends Test_User 
{ 
    public function create() { 
     return new SpecialUser(); 
    } 

    public function testSpecialFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Nothing', $user->commonFunctionality); 
    } 

    public function testModifiedFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Another Thing', $user->commonFunctionality); 
    } 
} 

을하고 있기 때문에 테스트 메소드는 부모 테스트 클래스에서 상속받습니다. 부모 클래스에 대한 모든 테스트는 예상 동작을 변경하기 위해 재정의하지 않는 한 하위 클래스에 대해 실행됩니다.

이것은 제한된 경험으로 훌륭하게 작동했습니다.

1

실제 UI를 테스트하려면 Selenium (www.openqa.org)과 같은 것을 사용해보세요. 그것은 PHP로 코드를 작성할 수있게 해줍니다. (phpUnit과 함께 작동한다고 가정합니다) 브라우저를 구동하십시오 ..

다른 접근법은 각기 다른 사용자 유형에 대해 호출 할 수있는 공통 메소드를 갖는 것입니다 . 즉, 'ValidatePage'와 같이 TestAdminUser 또는 TestRegularUser에서 호출하고 메소드가 단순히 사용자가 기대하는 것과 동일한 기본 유효성 검사를 수행하도록 할 수 있습니다.

1

패턴 반 여기에 부딪 치지 않았는지 확인하십시오. 어쩌면 당신은 생성자에서 너무 많은 일을 할 것인가? 아니면 이것들은 실제로 다른 클래스에 있어야합니까? 테스트는 종종 코드 설계에 대한 단서를 제공합니다. 들으십시오.