Чтобы было ясно, я должен подтвердить, что "непроверенный" был передан в фабричный метод 2-го аргумента.
<?php
public function execute(Model_ACL_User $user, array $extra = NULL)
[...] ORM::factory('role', array('name' => 'unverified')) [...]
Извините, приятель, вы не можете этого сделать, поскольку нет (вменяемого) способа макетировать статический вызов метода.
Аргумент, почемуЭта проблема похожа на одно из сообщения в блоге Себастьяна Бергманна: Testing-Code-That-Uses-Singletons
Существуют варианты, такие как runkit
, которые можно выбрать для замены "ORM "класс во время выполнения с поддельной версией, но это действительно больно.
Итак, есть несколько вариантов:
Вы можете создать что-то вроде Policy_File_Upload_Data_Provider
, котороеимеет метод ->getRoles
, в котором вы предоставляете доступ к ORM.Это позволило бы вам хорошо протестировать свою бизнес-логику и протестировать, что класс доступа к данным должен быть немного проще, чем слишком (просто доступ к orm).
Вы можете добавить свой класс ORM (илиесли это не сработает, может быть, просто его имя).В зависимости от самого класса, вы сможете создать экземпляр и вызвать -> factory, как если бы это был обычный метод.Вы можете поиздеваться над этим.
Если вы не хотите, чтобы это просто оставлялось там, это тоже НАСТОЛЬКО плохой вариант.
Надеюсь, что, по крайней мере, вы получили идею / обзор.
Дополнительные ссылки, почему трудно проверить статику:
Misko Hevery - Flaw: Brittle Global State & Singletons
Kore Nordmann - Static considered harmful