Я пришел на эту страницу с тем же вопросом, однако принятый ответ распространяется на все классы, и для меня это был не правильный ответ.
Если вы похожи на меня, ваш первый «интеграционный тест» должен очистить БД и запустить миграцию. Это дает вам базовую базу данных для всех тестов. На этом этапе я постоянно меняю файлы миграции, поэтому настройка базовых показателей действительно является частью всех тестов.
Миграция занимает некоторое время, поэтому я не хочу запускать ее во всех тестах.
Тогда мне нужно было создать базу данных, тестирующую каждый кусок. Мне нужно написать тест заказа, но сначала мне нужно создать несколько продуктов и протестировать их, затем мне нужно протестировать функцию импорта.
Итак, то, что я сделал, СУПЕР легко, но не очень хорошо объясняется в интернете. Я создал простой тест для настройки базы данных. Затем в вашем файле phpspec.xml добавьте тестовый набор ....
<testsuite name="Products">
<file>tests/in/SystemSetupTest.php</file>
<file>tests/in/ProductTest.php</file>
<file>tests/in/ProductImportTest.php</file>
</testsuite>
А в SystemSetupTest.php ....
class SystemSetupTest extends ApiTester
{
/** @test */
function system_init()
{
fwrite(STDOUT, __METHOD__ . "\n");
self::createEM(); //this has all the code to init the system...
}
}
Затем выполните это как:
phpunit --testsuite Products
В конце концов, это намного легче. Это позволит мне правильно построить свою систему.
Кроме того, я использую laravel 5. При использовании setUpBeforeClass()
у меня возникают проблемы с загрузкой, которые, я уверен, я могу исправить, но метод, который я использую выше, работает отлично.