Поддельные объекты в PHPUnit присоединяются к тестовому экземпляру, для которого они созданы, и это по определению означает один метод тестирования. Причина этого заключается в том, что PHPUnit позволяет указывать ожидания для макета, которые должны быть удовлетворены во время теста. Для этого он утверждает эти ожидания после успешного завершения метода. Если издеваться над испытаниями, ожидания не сработают.
Проблема в том, что это не поддерживает объекты-заглушки: макеты, которые содержат только стандартные действия, которые необходимо выполнить в ответ на методы и входные данные. Заглушки не подтверждают, что их методы вызываются как полные ложные показания. Возможно, PHPUnit мог бы извлечь выгоду из возможности создавать заглушки в setUpBeforeClass()
, которые не привязаны к тестовому экземпляру.
Другой вариант - использовать внешнюю библиотеку фиктивных объектов, такую как Насмешка или Phake .
Редактировать: После повторного просмотра вашего примера кода, я удивляюсь, почему вы удивляетесь такому поведению. Как писал Шаунак, setUp()
вызывается в новом экземпляре перед выполнением каждого метода тестирования. Таким образом, каждый экземпляр получает новый макет stdClass
. Если вы хотите, чтобы только один тестовый метод получил ожидание, добавьте его внутри самого тестового метода. Вы все еще можете создать фиктивный объект в setUp()
с любым поведением, которое должно быть общим для всех методов тестирования.