Модульное тестирование в Magento 2

Модульное тестирование в Magento 2

Модульные тесты или Юнит тесты или Unit tests предназначены для тестирования отдельных методов класса изолированно, перебирая все возможные комбинации и заботясь о наименьшей тестируемой части приложения. Magento 2 использует инфраструктуру тестирования PHPUnit для своих модульных тестов. Будучи сфокусированными на очень небольшом куске кода класса, модульные тесты позволяют легко определить причину проблем в случае сбоя определенного теста. Мы можем специально запустить только юнит-тесты из корня установки Magento, используя следующую команду:

php bin/magento dev:tests:run unit

После запуска Magento выполнит команду execute в файле

vendor/magento/module-developer/Console/Command/DevTestsRunCommand.php

Поскольку тип устройства сопоставлен с несколькими командами, Magento 2 будет запускать тесты на основе настроек из следующих каталогов, по-очереди, как показано ниже:

  • dev/tests/unit
  • dev/tests/performance/framework/tests/unit
  • dev/tests/static/framework/tests/unit
  • dev/tests/integration/framework/tests/unit

Можно сказать, что все эти каталоги считаются каталогами настроек  модульных тестов.

Внутри каждого из этих каталогов Magento внутренне запускает метод passthru($command, $returnVal), где параметр $command преобразуется в строку, подобную следующей:

php /www/magento2/./vendor/phpunit/phpunit/phpunit

Затем PHPUnit будет искать файл конфигурации phpunit.xml в каждом из этих каталогов, если такого не будет найдено, то будут использованы настройки из файла phpunit.xml.dist. Нам лучше самим создать файл phpunit.xml самостоятельно, если он не существует, просто скопировав и переименовав файл phpunit.xml.dist - это поможет нам четко понимать, где наши индвидуальные настройки.

Ниже представлен список путей, в которых будет осуществлен поиск файлов тестов, у которых в обязательном порядке должно быть окончание "Test.php". Вот пример названия тестового файла "SomePluginTest.php".

  • ../../app/code/*/*/Test/Unit
  • ../../dev/tools/*/*/Test/Unit
  • ../../dev/tools/*/*/*/Test/Unit
  • ../../lib/internal/*/*/Test/Unit
  • ../../lib/internal/*/*/*/Test/Unit
  • ../../setup/src/*/*/Test/Unit
  • ../../update/app/code/*/*/Test/Unit
  • ../../vendor/*/module-*/Test/Unit
  • ../../vendor/*/framework/Test/Unit
  • ../../vendor/*/framework/*/Test/Unit

Например, если мы посмотрим на первую строку в предыдущем коде, а затем посмотрим на модуль Magento_Catalog, становится ясно, что тестовые файлы находятся в папке app/code/<vendorName>/<moduleName>/Test/ каталог и его подкаталоги. Все файлы с суффиксом Test.php в этих папках будут выполнены как часть модульного теста.

Настройки из файла phpunit.xml позволяют гибко настраивать группу запускаемых тестов

Если бы мы создавали наш собственный модуль, мы могли бы легко сделать копию dev/tests/unit/phpunit.xml.dist, правильно отредактировать testsuite и filter > whitelist, чтобы быстро выполнить модульные тесты только нашего модуля или нашего вендора, тем самым сэкономив некоторое время на избежании частых выполнений всех модульных тестов Magento 2.