Как исправить «нет прототипа» при использовании php & behat - PullRequest
0 голосов
/ 12 июня 2018

Добрый день.Я изучаю тестирование PHP BDD с помощью Behat.Я внимательно следил за этим Behat 3 учебником: http://docs.behat.org/en/latest/quick_start.html

Я на Windows 10, использую php 5.6.33.Я добавил composer.phar и composer.json в папку своего проекта, и последний файл выглядит следующим образом:

{
    "require-dev": {
        "behat/behat": "~3.0.4",
        "phpunit/phpunit": "~4.1.0"
    }
}

Затем, как показано в руководстве, я запускаю команды в следующем порядке:

  1. php composer.phar install.
  2. vendor/bin/behat --init.
  3. Я поместил файл sample.feature в папку features.

Файл функцийвыглядит так:

Feature: Product basket
  In order to buy products
  As a customer
  I need to be able to put interesting products into a basket

  Rules:
  - VAT is 20%
  - Delivery for basket under £10 is £3
  - Delivery for basket over £10 is £2

  Scenario: Buying a single product under £10
    Given there is a "Sith Lord Lightsaber", which costs £5
    When I add the "Sith Lord Lightsaber" to the basket
    Then I should have 1 product in the basket
    And the overall basket price should be £9

  Scenario: Buying a single product over £10
    Given there is a "Sith Lord Lightsaber", which costs £15
    When I add the "Sith Lord Lightsaber" to the basket
    Then I should have 1 product in the basket
    And the overall basket price should be £20

  Scenario: Buying two products over £10
    Given there is a "Sith Lord Lightsaber", which costs £10
    And there is a "Jedi Lightsaber", which costs £5
    When I add the "Sith Lord Lightsaber" to the basket
    And I add the "Jedi Lightsaber" to the basket
    Then I should have 2 products in the basket
    And the overall basket price should be £20

Но когда я запускаю vendor/bin/behat --init, я получаю это исключение, которое на самом деле не препятствует созданию фрагментов кода:

    ReflectionException: Method FeatureContext::__construct does not have a prototype in D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Behat\Context\Reader\AnnotatedContextReader.php on line 86

    Call Stack:
        0.0054     237328   1. {main}() D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\bin\behat:0
        0.5684    2249712   2. Symfony\Component\Console\Application->run(???, ???) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\bin\behat:31
        0.7328    2785200   3. Behat\Testwork\Cli\Application->doRun(class Symfony\Component\Console\Input\ArgvInput, class Symfony\Component\Console\Output\ConsoleOutput) D:\Projects\php-projects\local-behat-phpunit-2\vendor\symfony\console\Application.php:117
        5.8172   12067888   4. Symfony\Component\Console\Application->doRun(class Symfony\Component\Console\Input\ArgvInput, class Symfony\Component\Console\Output\ConsoleOutput) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Cli\Application.php:102
        5.8180   12068848   5. Symfony\Component\Console\Application->doRunCommand(class Behat\Testwork\Cli\Command, class Symfony\Component\Console\Input\ArgvInput, class Symfony\Component\Console\Output\ConsoleOutput) D:\Projects\php-projects\local-behat-phpunit-2\vendor\symfony\console\Application.php:193
        5.8181   12069424   6. Symfony\Component\Console\Command\Command->run(class Symfony\Component\Console\Input\ArgvInput, class Symfony\Component\Console\Output\ConsoleOutput) D:\Projects\php-projects\local-behat-phpunit-2\vendor\symfony\console\Application.php:843
        5.8252   12079976   7. Behat\Testwork\Cli\Command->execute(class Symfony\Component\Console\Input\ArgvInput, class Symfony\Component\Console\Output\ConsoleOutput) D:\Projects\php-projects\local-behat-phpunit-2\vendor\symfony\console\Command\Command.php:241
        5.8558   12157688   8. Behat\Testwork\Tester\Cli\ExerciseController->execute(class Symfony\Component\Console\Input\ArgvInput, class Symfony\Component\Console\Output\ConsoleOutput) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Cli\Command.php:63
        5.9129   12222752   9. Behat\Testwork\Tester\Cli\ExerciseController->testSpecifications(class Symfony\Component\Console\Input\ArgvInput, array(2)) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Tester\Cli\ExerciseController.php:108
        5.9802   12264200  10. Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise->test(array(2), bool) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Tester\Cli\ExerciseController.php:146
        5.9802   12264432  11. Behat\Testwork\Tester\Runtime\RuntimeExercise->test(array(2), bool) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise.php:70
        6.0493   12324584  12. Behat\Testwork\EventDispatcher\Tester\EventDispatchingSuiteTester->setUp(class Behat\Behat\Context\Environment\UninitializedContextEnvironment, class Behat\Testwork\Specification\GroupedSpecificationIterator, bool) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Tester\Runtime\RuntimeExercise.php:69
        6.0691   12342664  13. Behat\Testwork\Hook\Tester\HookableSuiteTester->setUp(class Behat\Behat\Context\Environment\UninitializedContextEnvironment, class Behat\Testwork\Specification\GroupedSpecificationIterator, bool) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\EventDispatcher\Tester\EventDispatchingSuiteTester.php:59
        6.0976   12359008  14. Behat\Testwork\Hook\HookDispatcher->dispatchScopeHooks(class Behat\Testwork\Hook\Scope\BeforeSuiteScope) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Hook\Tester\HookableSuiteTester.php:63
        6.0976   12359192  15. Behat\Testwork\Hook\HookRepository->getScopeHooks(class Behat\Testwork\Hook\Scope\BeforeSuiteScope) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Hook\HookDispatcher.php:57
        6.0976   12359280  16. Behat\Testwork\Hook\HookRepository->getEnvironmentHooks(class Behat\Behat\Context\Environment\UninitializedContextEnvironment) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Hook\HookRepository.php:67
        6.0977   12359352  17. Behat\Testwork\Environment\EnvironmentManager->readEnvironmentCallees(class Behat\Behat\Context\Environment\UninitializedContextEnvironment) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Hook\HookRepository.php:50
        6.0977   12359600  18. Behat\Behat\Context\Environment\Reader\ContextEnvironmentReader->readEnvironmentCallees(class Behat\Behat\Context\Environment\UninitializedContextEnvironment) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Testwork\Environment\EnvironmentManager.php:115
        6.0978   12360208  19. Behat\Behat\Context\Environment\Reader\ContextEnvironmentReader->readContextCallees(class Behat\Behat\Context\Environment\UninitializedContextEnvironment, string(14)) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Behat\Context\Environment\Reader\ContextEnvironmentReader.php:66
        6.1051   12363528  20. Behat\Behat\Context\Reader\ContextReaderCachedPerContext->readContextCallees(class Behat\Behat\Context\Environment\UninitializedContextEnvironment, string(14)) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Behat\Context\Environment\Reader\ContextEnvironmentReader.php:87
        6.1052   12363616  21. Behat\Behat\Context\Reader\AnnotatedContextReader->readContextCallees(class Behat\Behat\Context\Environment\UninitializedContextEnvironment, string(14)) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Behat\Context\Reader\ContextReaderCachedPerContext.php:52
        6.1052   12365152  22. Behat\Behat\Context\Reader\AnnotatedContextReader->readMethodCallees(string(14), class ReflectionMethod) D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Behat\Context\Reader\AnnotatedContextReader.php:64
        6.1053   12365328  23. ReflectionMethod->getPrototype() D:\Projects\php-projects\local-behat-phpunit-2\vendor\behat\behat\src\Behat\Behat\Context\Reader\AnnotatedContextReader.php:86

Я только начализучать PHP, но, насколько я понимаю, интерфейс AnnotatedContextReader действительно не имеет прототипа для метода __construct, но упомянутый интерфейс расширяет интерфейс Context, и у этого есть такой прототип метода.Итак, я решил пока пропустить это исключение и закончил предоставленный учебник.Я могу запустить свои тесты behat, но консоль полна ReflectionExceptions с жалобами на отсутствие прототипов для моих этапов тестирования.Это резко увеличивает время выполнения и определенно не должно происходить.Есть идеи, что я делаю не так?Для фрагментов кода, пожалуйста, обратитесь к учебной ссылке, которую я предоставил.

1 Ответ

0 голосов
/ 14 июня 2018

Хорошо, это немного смущает.После некоторого осмотра я обнаружил, что это поведение не имеет ничего общего с версией php, которую я использую.Трассировка исключений была показана, потому что у меня было включено расширение xdebug и настроено отображение всех возможных выходных данных.Поэтому я считаю, что именно поэтому моя консоль была заполнена ReflectionException с, а выполнение теста было очень медленным.установка этой строки решила мою проблему:

xdebug.show_exception_trace=0

С другой стороны, это не объясняет мне, почему ReflectionException происходит в первую очередь, просто маскирует трассировку исключений.Я понимаю, что это потому, что в базовых интерфейсах отсутствуют прототипы методов, но сделано ли это намеренно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...