PHPUnit Test Suite - невозможно переопределить класс Mocking и Concrete - PullRequest
6 голосов
/ 12 октября 2011

Вот моя проблема.

У меня есть набор тестов, который тестирует несколько классов.Все мои классы используют внедрение зависимостей.

У меня есть класс с именем scheduleHandler, который проходит все тесты.Тогда у моего другого класса ruleHandler есть метод, который требует экземпляра scheduleHandler.Я не хочу передавать реальный scheduleHandler, поэтому я попытался создать фиктивный scheduleHandler для инъекций.

Проблема, с которой я столкнулся, заключается в том, что, так как класс scheduleHandler тестируется в наборе выше ruleHandler, при создании макетаЯ получаю: -

PHP Fatal error:  Cannot redeclare class scheduleHandler

Если я не использую набор тестов и запускаю тесты по отдельности, все в порядке.

Кто-нибудь знает способ обойти это?

Ответы [ 3 ]

5 голосов
/ 13 октября 2011

Мое лучшее предположение на данный момент:

var_dump(class_exists('scheduleHandler', false)); 

возвращает false для вас. Это означает, что класс еще не существует. Теперь, если ваш автозагрузчик не находит класс, когда phpunit пытается расширить его, phpunit создаст сам класс.

Если вы позже по дороге, то требуйте, чтобы класс REAL откуда-то сталкивался с классами.

Чтобы проверить это, убедитесь, что вам необходим класс REAL scheduleHandler ДО создания фиктивного объекта.

3 голосов
/ 09 марта 2012

Попробуйте использовать пространства имен при создании макетов. Если вы не используете их в своем коде проекта, то, надеюсь, он переопределит глобальное пространство имен и не вызовет конфликта

$this->getMock('\SomeTestingFramework\SomeTestClass\scheduleHandler');

0 голосов
/ 12 октября 2011

Попробуйте $this->getMock('scheduleHandler', array(), array(), '', false).Это приведет к тому, что PHPUnit пропустит вызов scheduleHandler::__construct, что, вероятно, привело к ошибке при двойной загрузке класса.

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