Похоже, ваши макеты настроены правильно.Я на самом деле не знал, что вы можете возвращать mocks из mocks, пока я не увидел ваш вопрос и немного его не изучил.
Здесь происходит то, что вам нужно заставить метод getModelFactory () возвращать экземпляр вашей фабрики mock,Прямо сейчас он просто возвращает реальную вещь.
Я не уверен, что происходит в вашем методе getModelFactory, поэтому мне сложно сказать, как вы могли бы переопределить его, чтобы он возвращал вашу ложную фабрику.
Но, возможно, вам не нужно переопределять это.В моем приложении ZF я не тестирую контроллеры, но для тестирования того, что требует сохранения данных в моих моделях, я просто переключаюсь на тестовую базу данных в своем конфигурационном файле для тестирования.Я использую Doctrine1.2, поэтому я просто запускаю транзакцию в методе setUp () и откат в методе tearDown ().
Моя тестовая база данных полностью пуста, и я в основном создаю необходимые данные в каждом тестовом методе с некоторыми конкретными фабричными классами теста.Недостаток в том, что он использует много памяти.Я думаю, что он составляет около 200 МБ примерно на 140 тестах, и не все из них требуют доступа к базе данных.
Я просто использую этот метод, поскольку его проще всего реализовать, поскольку мне нужно было только изменить конфигурацию базы данных.Если вы не работаете с очень масштабным проектом, это может сработать для вас.Вы также можете запустить свои тесты для тестовой базы данных, используя sqlite в памяти, что должно работать для вас, поскольку тестирование базы данных не выполняется.Данные просто вставляются, а затем в конце теста они исчезают.В моем проекте я использую тестовую базу данных MySQL, потому что я хотел, чтобы она была как можно ближе к тому, что находится в производстве.
Пример (Вы, вероятно, не используете Doctrine. Я просто иллюстрирую, как я используютранзакции и откат для поддержания моей тестовой базы данных в согласованном состоянии):
public function setUp()
{
$this->bootstrap = new Zend_Application(
APPLICATION_ENV, APPLICATION_CONFIG);
parent::setUp();
$bootstrap = $this->bootstrap->getBootstrap();
$this->_conn = Doctrine_Manager::connection();
$this->_conn->beginTransaction();
}
public function tearDown()
{
$this->_conn->rollback();
$this->_conn->close();
}