2015-05-18 3 views
-3

Я использую phpunit. Но вы знаете его трудности, нет возможности издеваться над частными функциями, получать доступ к приватным переменным и т. Д. Есть ли инструмент, который поможет мне? Что-то, чтобы превратить частные функции в общественность, превратить статический метод в макет, и т. Д.Любой инструмент для тестирования модулей?

+2

Необходимость доступа к частным функциям и методам класса является признаком того, что вы делаете что-то неправильно (тестирование или тестируемый класс или оба). Проверьте интерфейс класса (т. Е. Общедоступные методы). Вы не должны заботиться о его внутреннем способе выполнения работы. – axiac

ответ

4

Непосредственно отвечая на ваш вопрос, но лучший «инструмент» для упрощения phpunit - это хороший дизайн вашего кода. Если вы не знаете, какой будет хороший дизайн для данной проблемы, вы уже используете другой хороший инструмент, доступный вам - этот сайт.

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

Например, в трудностях, с вашего вопроса:

  • Дразнящий частные функции - Это запах, который есть второй класс, который должен быть создан. Ваш объект может нарушать принцип одиночной ответственности . Вероятно, эта функция должна быть перемещена в свой собственный объект и передана в тестируемую систему.

  • Доступ к приватным переменным - PHPUnit имеет утверждения для объектов атрибуты (assertAttributeEquals, etc.). Однако это действительно не то, что вам нужно использовать. Частный переменная деталь реализации вашего объекта, должна быть каким-то общедоступного метода, который вы можете использовать, чтобы убедиться, что надлежащая информация была установлена ​​(геттер или зависимость впрыскивается фиктивный объект)

  • Дразнящих статическим методы - Есть много вопросов о SO об этом трудностях и многих ресурсах, говорящих, как статические методы не хороши дизайн. Если вам нужно высмеять статический метод, это означает, что вы используете , влияя на глобальное состояние. Статические методы также скрывают зависимости от пользователей вашего объекта и затрудняют их модификацию. Ваш дизайн становится менее гибким и более модульным.

2

Yo не нужно проверить личные методы и атрибуты. Они частные по причине и имеют смысл только при вызове из класса, который их удерживает. Более того, если вы протестируете открытый метод, вы также косвенно проверяете частные методы, которые он вызывает, а результат публичной функции также может зависеть от некоторых частных атрибутов, которые вы также тестируете с помощью общедоступного метода.

Если вы тестируете все общедоступные методы класса (то есть его интерфейс), и этим я подразумеваю полное покрытие кода/филиала по этим методам, то вы тестируете все частные методы/атрибуты, которые необходимы . Если после тестирования всего публичного материала вы остаетесь с некоторыми фрагментами кода, который не был достигнут, вы можете безопасно удалить этот код, поскольку он бесполезен.