2016-01-28 5 views
0

Я создал псевдоним, используя Mockery в классе A, чтобы высмеять вызовы на некоторые общедоступные статические методы, которые сделаны в классе, который я хочу протестировать.Alias ​​mock сохраняется по классам тестов

В другом классе испытаний B Я хочу использовать эти общедоступные статические методы (не издеваться), но похоже, что псевдоним mock, созданный в тестовом классе A, сохраняется, когда выполняется тестовый класс B. При выполнении тестов в тестовом классе BI получаю это исключение: BadMethodCallException: Static method Helper::formatDate() does not exist on this mock object, даже если класс Helper не следует издевались в классе B.

Я попытался добавить:

/** 
* @runTestsInSeparateProcesses 
* @preserveGlobalState disabled 
*/ 

в тестовых классов, чтобы сделать их работать отдельно, но потом я получаю эту ошибку:

PHPUnit_Framework_Exception: PHP Fatal error: Class 'TestCase' not found

Любой, кто имеет какие-либо идеи, как решить эту проблему?

ответ

1

Попробуйте использовать AspectMock, который должен издеваться статические методы: https://github.com/Codeception/AspectMock

В любом случае эта проблема является показателем вашего кода не будучи проверяемым. Вы должны рассмотреть возможность рефакторинга, а не использовать статические вызовы, которые нужно издеваться.

+0

Спасибо за ваш ответ @gontrollez. С помощью Mockery также возможно издеваться над статическими методами, и я не хочу менять насмешливую структуру, поскольку у меня довольно много модульных тестов, которые используют Mockery. Mockery также интегрирован в рамки, которые я использую. Возможно, мне удастся реорганизовать мой код, но Laravel использует по умолчанию довольно много статических вызовов. –

+0

Да, я понял. Я не использовал Laravel в реальных проектах, поэтому я не могу сказать, но я уверен, что должен быть способ полностью протестировать код, разработанный с Laravel. Попробуйте задать вопрос, связанный с Laravel. – gontrollez

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