2013-02-09 2 views
3

У меня есть следующие тесты/папки:Как распространять setUp и tearDown во всех тестах в phpUnit?

 
tests/ 
    ClassOne.test.php 
    ClassTwo.test.php 
    ClassThree.test.php 

Я копируя следующие setUp() и tearDown() методы в каждый из этих файлов:

 
    public function setUp() 
    { 
     $this->dbTestData(); 
    } 

    public function tearDown() 
    { 
     $this->dbClear(); 
    } 

    private function dbTestData() { 
     // populate the database with a few entries 
     Entities\AutocompleteValue::create(array('field_name' => 'testing1', 'entry_value' => 'Aisforapple')); 
     Entities\AutocompleteValue::create(array('field_name' => 'testing2', 'entry_value' => 'Bisforball')); 
     Entities\AutocompleteValue::create(array('field_name' => 'testing3', 'entry_value' => 'Cisforcat')); 
     Entities\AutocompleteValue::create(array('field_name' => 'testing4', 'entry_value' => 'Disfordog')); 
    } 

    private function dbClear() { 
     DB::table('autocomplete_values')->delete(); 
    } 

Я рассматривал возможность написания один отдельный класс, содержит эти методы, require() этот файл в каждом из тестовых файлов и распространяется от , что класс вместо PHPUnit_Framework_Testcase. Есть ли более легкое решение?

У меня нет легкого доступа к phpunit.xml, потому что инструмент CLI моей рамки кодирования (Laravel, artisan) обрабатывает его создание. Следовательно, было бы лучше, если есть решение, не связанное с этим файлом.

+0

Написание базового тестового класса и переход от него - лучший способ пойти, как это нелегко? –

+0

Мне не понравилось, что мне нужно написать инструкцию «require» в каждом тестовом файле. Я хотел использовать автозагрузку, но моя инфраструктура не позволит этого. Похоже, я застрял, чтобы скопировать хотя бы одну строку во всех моих тестовых файлах. –

+1

Наличие базового тестового класса - очень распространенная практика. Вы можете в конечном итоге рассмотреть возможность использования композиции, если хотите пойти с более чистым (но сложнее) способом. – Ocramius

ответ

3

Дайте и создайте базовый класс. Это стандартное решение в этой ситуации. Это приносит другие преимущества, такие как хорошее место для хранения утвержденных вами расширений static.

Я боюсь даже придумать альтернативный подход, не говоря уже о том, что проще. Все, что я могу предложить, это использовать скрипт, который сканирует каждый тестовый файл и вставляет setUp, tearDown и их зависимости, если они не найдены. Но (IMHO), это гораздо более сложное решение, не имеющее существенной выгоды.

Смежные вопросы