setUp, tearDown
jUnit 처럼 매 테스트마다 호출되어야 하는 메서드가 있다면 setUp 과 tearDown 사용
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);
}
CODE
전역 픽스처
클래스 생성전, 파괴전에 한 번만 호출될 전역 메서드가 필요할 경우 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;
}
}
CODE
문제 해결
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
CODE
원인은 parent::setUp() 을 호출하지 않아서 임
public function setUp()
{
//parent::setUp();
$this->mig = new MigUtils;
}
CODE
Ref