2013-11-02 4 views
0

다음 코드를 사용하여 새 사용자를 만듭니다. PHPUnit을 사용하여 테스트 케이스를 준비하고 있지만 코드 커버리지가 예외 케이스를 처리 할 수 ​​없습니다. 즉 throw new Exception(__CLASS__ . ': Invalid data');.PHPUnit 예외

assertInstanceOf() 또는 다른 것을 사용하여 phpunit에서 예외 케이스를 처리하는 방법을 보여줄 수 있습니까?

/** 
* Creates a new user 
* 
* @param string   $email 
* @param UserType  $UserType 
* 
* @return UserID 
* @throws Exception If Invalid Data is Provided 
*/ 
static public function Create($email, UserType $UserType) 
{ 
    if (!$UserType instanceof UserType) { 
     throw new Exception(__CLASS__ . ': Invalid data'); 
    } 

    $UserID = parent::Create($email, $UserType); 

    return $UserID; 

} 

많은 감사

+0

녀석들, 정확하게 내가 무엇을 찾고 있는지를 모른 채로 이것을 중복 게시물로 만드는 결론에 도달하지 마십시오. 당신이 게시 한 링크는 타입 힌팅의 예외 처리에 관해서 아무 말도하지 않기 때문에 나에게는 도움이되지 않습니다. 감사합니다 – user2909892

+0

중복되지 않는 이유는 무엇입니까? – hakre

+0

질문의 묻는 사람으로서 당신이 '정확히 찾고있는 것'을 말해주는 것은 당신에게 달렸습니다. 그 밖에 어떻게 대답을 기대합니까? – vascowhite

답변

1

당신이 뭔가 다른 매개 변수 $의 UserType을로 바로 클래스의 인스턴스를 넣어 테스트를 작성합니다. 예를 들어 문자열 :

/** 
* @covers MyClass::Create 
* @expectedException Exception 
*/ 
public function testCreate() { 
    $myTestedInstance->Create('[email protected]', 'invalid param', ....); 
} 
+1

PHPUnit을 사용하면 \ Exception 클래스를 테스트 할 수 없다는 점을 추가 할 가치가 있습니다. 테스트를 위해보다 특수화 된 예외를 사용해야합니다 (예 : \ InvalidArgumentException). – Cyprian

+0

@Cyprian, 정말 당신이 말하려고하는 것을 얻지 못했습니다, pls는 예외로 정교합니다. 많은 감사 – user2909892

+0

물론. 예외를 throw하는 데 generic 클래스를 사용하는 경우 : \ Exception, PHPUnit 테스트는 "InvalidArgumentException : 일반 예외 클래스를 기대하면 안됩니다."라는 메시지와 함께 실패합니다. 그리고 이것은 예외 (예 : \ InvalidArgumentException 또는 \ LogicException 또는 자신의 예외)를 테스트하려는 경우보다 특수한 예외 클래스를 사용해야 함을 의미합니다. – Cyprian