phpunit Fixtures

setUp, tearDown

jUnit 처럼 매 테스트마다 호출되어야 하는 메서드가 있다면 setUptearDown 사용

class HttpTest extends TestCase
{
    protected $http = null;

    protected  function setUp()
    {
        $this->http = new HttpClient();
    }

    protected  function tearDown()
    {
        $this->http = null;
    }

    public function testBasicExample()
    {
        $this->assertEquals($this->http, null);
        var_dump($this->http);
    }

전역 픽스처 

클래스 생성전, 파괴전에 한 번만 호출될 전역 메서드가 필요할 경우 setUpBeforeClass,tearDownAfterClass  를 static 으로 구현

class HttpTest extends TestCase
{
    protected $http = null;
	
   public static function setUpBeforeClass()
   { 
       print('setUpBeforeClass');
   }


   public static function tearDownAfterClass  ()
   { 
       print('tearDownAfterClass  ');
   }

    protected  function setUp()
    {
        $this->http = new HttpClient();
    }

    protected  function tearDown()
    {
        $this->http = null;
    }
}



문제 해결

Laravel Eloquent 에서 에러 발생

phpunit 으로 단위 테스트시 setUp() 메소드를 추가하면 다음 에러 발생

PHP Fatal error:  Call to a member function connection() on a non-object in vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php on line 3146
PHP Stack trace:
PHP   1. {main}() C:\util\phpunit.phar:0
PHP   2. PHPUnit_TextUI_Command::main() C:\util\phpunit.phar:612
PHP   3. PHPUnit_TextUI_Command->run() phar://C:/util/phpunit.phar/phpunit/TextUI/Command.php:138
PHP   4. PHPUnit_TextUI_TestRunner->doRun() phar://C:/util/phpunit.phar/phpunit/TextUI/Command.php:186
PHP   5. PHPUnit_Framework_TestSuite->run() vendor\phpunit\phpunit\src\TextUI\TestRunner.php:406
PHP   6. PHPUnit_Framework_TestCase->run() vendor\phpunit\phpunit\src\Framework\TestSuite.php:722
PHP   7. PHPUnit_Framework_TestResult->run() vendor\phpunit\phpunit\src\Framework\TestCase.php:699
PHP   8. PHPUnit_Framework_TestCase->runBare() vendor\phpunit\phpunit\src\Framework\TestResult.php:609
PHP   9. PHPUnit_Framework_TestCase->runTest() vendor\phpunit\phpunit\src\Framework\TestCase.php:743
PHP  10. ReflectionMethod->invokeArgs() vendor\phpunit\phpunit\src\Framework\TestCase.php:866


원인은 parent::setUp() 을 호출하지 않아서 임

public function setUp()
	{
		//parent::setUp();
		$this->mig = new MigUtils;		
	}


Ref