2010-03-04 6 views
2

치명적인 예외를 잡는 데 몇 가지 질문이 있지만이 중 하나는 SimpleTest 사용과 관련이 있습니다. (나는 SimpleTest가 시대에 뒤 떨어진다는 것을 알고 있지만, PHP-Unit이 나의 구성에서 작동하도록하는 것은 또 다른 질문이다).PHP와 SimpleTest - 치명적인 예외가 있더라도 tearDown() 실행

치명적인 예외가있는 경우에도 설치 중에 tearDown() 메서드를 작동 시키려고합니다. 설치하는 동안 데이터베이스에 일부 테스트 행을 만들고 분리하는 동안 제거해야합니다. 그러나 SimpleTest가 치명적인 예외에 빠지면 teardown()이 실행되지 않습니다.

치명적인 예외 발생에도 불구하고 tearDown()을 실행할 수있는 방법이 있습니까?

답변

3

사용할 수있는 "register_shutdown_fuction"후크있다 "shutdownHandler"에서

register_shutdown_function(array($this, 'shutdownHandler')); 

당신은 쓸 수 있습니다 :

error_get_last() && $this->tearDown(); 
1

치명적인 오류가 발생하면 PHP 프로세스가 종료됩니다. 즉, 더 이상 존재하지 않으므로 동일한 PHP 프로세스가 모든 종류의 코드를 실행하도록 할 수는 없습니다.

이는 것을 의미합니다 : 당신은 아마 훨씬

  • 보고되지 것

    • 치명적 오류에서 종료 한 후 다른 테스트 당신은 테스트를
    • 실행되지 않습니다 그것은 실패하고있다 - 나쁘게.


    당신은 문제를 해결해야합니다 응용 프로그램에서 치명적인 오류가 나쁜이다; 물론 자동화 된 테스트를 통해이를 감지 한 것은 대단한 일입니다. 그러나 다음 단계는 사라지게 만드는 것입니다 .-)


    동일한 프로세스에서 더 이상 PHP 코드를 실행할 수 없으므로 내가 볼 수있는 유일한 해결책은 정리 프로세스를 실행하기 위해 다른 프로세스를 시작하는 것입니다. , 당신의 검사 결과

  • 를 사용하여 다른, 완전히 별개의 스크립트

    • 시작 물론

    는, 이것은을 의미 청소 작업을 실행하려면 :

    기본적인 아이디어는하는 것 청소는 모든 테스트가 끝난 후에 한 번만 수행됩니다. 그러나 그것은 아무것도 아닌 것보다 낫다고 생각합니다.


    이제 어떻게 자동화 할 수 있습니까?

    가장 간단한 해결책은 두 명령을 실행하는 셸 스크립트를 사용하는 것입니다. 이런 식으로, 나는 다음과 같이 말할 것이다 :

    #!/bin/sh 
    
    php /.../launch-tests.php 
    
    php /.../cleanup.php 
    

    그리고 쉘 스크립트를 실행하여 테스트를 실행하십시오.

  • 관련 문제