phpunit 단위 테스트 건너뛰기(skipping tests)

Mark Incomplete

새로운 테스트 케이스 클래스를 만들고 아래와 같은 테스트 메소드를 작성중인데 단위 테스트를 수행해야 합니다.

이 테스트 메소드는 아직 작성되지 않았지만 phpunit 에서 성공적으로 실행되는데 이는 별로 의미있는 정보가 아닙니다.

public function testSomething()
{
}

그렇다고 $this->fail() 를 호출해서 실패하게 만드는 것도 그리 좋은 방법은 아닙니다. 아직 미구현일 뿐이지 테스트 케이스가 실패한 것은 아니니까요.

 

phpunit 에는 이를 위해 markTestIncomplete() 메소드가 준비되어 있습니다. 미작성된 단위 테스트 메소드에서 호출하면 phpunit 은 이를 실행하지 않고 넘어 갑니다.

 

 

<?php
class SampleTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        // Optional: Test anything here, if you want.
        $this->assertTrue(TRUE, 'This should already work.');

        // Stop here and mark this test as incomplete.
        $this->markTestIncomplete(
          'This test has not been implemented yet.'
        );
    }
}
?>

이제 phpunit 을 실행하면 markTestIncomplete 로 설정된 부분은 실행하지 않고 최종 결과 보고서의 Incomplete 항목에 표시되므로 몇 개의 테스트 메소드가 미완성인지 알수 있습니다.

$ phpunit --verbose tests/SampleTest
 
Time: 130 ms, Memory: 5.00Mb
There was 1 incomplete test:
1) SampleTest::testSomething
This test has not been implemented yet.


tests/SampleTest.php:11
phar:///usr/local/bin/phpunit.phar/phpunit/TextUI/Command.php:152
phar:///usr/local/bin/phpunit.phar/phpunit/TextUI/Command.php:104
OK, but incomplete, skipped, or risky tests!
Tests: 1, Assertions: 1, Incomplete: 1.

 

 

Skip Test

환경에 따라서 특정 테스트 케이스는 실행되지 말아야 하는 경우가 있습니다. 예로 DBMS 를 추상화하여 사용하고 있고 개발 환경에서는 sqlite 를 운영 환경에서는 MySQL 을 사용하고 있다면 개발 환경 단위 테스트시 MySQL 과 연결하는 테스트 메소드를 실행할 필요는 없습니다.

phpunit 은 이를 위해 markTestSkipped 메소드를 제공하고 있으며 이 메소드가 있을 경우 테스트 케이스를 건너뜁니다.

<?php
class DatabaseTest extends PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        if (!extension_loaded('oci')) {
            $this->markTestSkipped(
              'The Oracle extension is not available.'
            );
        }
    }

    public function testConnection()
    {
        // ...
    }
}
?>

 

실행하면 아래와 같이 테스트 케이스를 건너뛰고 보고서의 Skipped: 항목에 추가됩니다.

$ phpunit --verbose tests/DatabaseTest.php 
 
Time: 146 ms, Memory: 5.00Mb
There was 1 skipped test:
1) DatabaseTest::testConnection
The Oracle extension is not available.

tests/DatabaseTest.php:9
phar:///usr/local/bin/phpunit.phar/phpunit/TextUI/Command.php:152
phar:///usr/local/bin/phpunit.phar/phpunit/TextUI/Command.php:104


OK, but incomplete, skipped, or risky tests!
Tests: 1, Assertions: 0, Skipped: 1.

 

Ref