2012-02-28 2 views
0

"--repeat"옵션에 대해 알고 있지만 테스트 및 테스트마다 반복을 정의하고 싶습니다. 단위 테스트에는 반복하고 싶지 않은 테스트가 있으며, 다른 테스트보다 더 반복하고 싶은 테스트가 있습니다.PHPUnit에서 어떻게 테스트를 되풀이합니까?

나는 생각했다 : 실행>

protected function tearDown() { 
    if (test has not been ran 3 times) { 
     $this->runTest(); // Re-run the test 
    } 
} 

이 작동하지 않으며, $ this-을한다(). PHPUnit 소스 코드를 살펴 봤지만 확실하지 않습니다. 나는 그것이 테스트 상태를 점검하고 그것이 실행 되었다면 다시 실행을 거부한다고 생각하고있다.

+0

단위 테스트에서 왜 필요합니까? Oo – Gordon

+0

PHPUnit_Framework_TestCase를 확장 한 추상 클래스 용입니다. 목적은 --repeat로 표시된 전역 X 반복 대신 테스트 당 X 반복을 정의하는 것입니다. – velo9

+0

나는 또한 이것을위한 해결책을 찾고 싶다. @ 고든 - 내 경우는 소켓 연결 (절약 : PHP)을 통해 서비스를 테스트하고있다. 실제로 네트워크의 과부하로 인해 테스트가 실패 할 수도 있습니다. 시간 초과 예외의 경우 테스트를 다시 실행하여 통과하거나 다른 오류/예외가 발생합니다. – ducin

답변

-1

do-while 루프로 구현할 수 없습니까?

protected function tearDown() { 
    $i = 0; 
    do { 
     $this->runTest(); // Re-run the test 
     $i++; 
    } while($i < 3); 
} 
+0

반복은 내 문제가 아니며, 쉽게 이해할 수 있습니다. 그것은 $ test-> runTest()를 호출하는 것은 아무 것도하지 않는다는 것입니다. 또한 모든 테스트 후에 tearDown이 호출되기 때문에 $ test-> runTest()가 작동한다고 가정하는 코드는 무한 루프에 놓이게됩니다. – velo9

0

나는 한발 물러서서 테스트를 실행하는 테스트를 만들어야한다고 생각합니다. 각 테스트 설정 및 해체를 필요로하기 때문에 작동하지 않습니다 게시 된 코드가 테스트 실행될 때마다 실행되는

$myTest = \my\test\class(); 
foreach($iterations){ 
    $myTest->setup(); 
    $myTest->doTestyStuff(); 
    $myTest->tearDown(); 
} 

:

는 당신의 라인을 따라 뭔가를 간다 루프가 필요합니다.

+0

tearDown은 각 테스트 후에 tearDown이 실행되기 때문에 tearDown에있었습니다. 그래서 루프를 만들 생각입니다. 정적 반복기 또는 무언가를 검사하여 루프를 중단합니다. 위에서 제안한 바는 내가 일할 수 있다고 생각하지만 각 테스트를 X 번 실행하려고하고 있으며 모든 테스트를 한 번 또는 여러 번 실행해야하는 것은 아닙니다. – velo9

1

setUp, runtearDown보다 테스트를 실행하는 것이 훨씬 더 중요합니다. 한 가지 방법으로 각 테스트 메소드는 테스트 케이스의 새 인스턴스에 대해 실행됩니다. @dataProvider 및 기타 주석, 코드 커버리지 등을 잊지 마십시오. 실제로이 작업을 원하지 않습니다.

거의 경우 이 필요합니다. 테스트 메소드 자체에 루프를 코딩하십시오.

관련 문제