Сохранить запись доктрины без сохранения

в моих модульных тестах я хотел бы иметь следующее поведение:

$myNewDoctrineRecord = new Dto_MyRecord();
$myNewDoctrineRecord->pk = 1; //the primary key
...
$myNewDoctrineRecord->save();

Теперь эта запись не должна сохраняться в базе данных. Но я хотел бы сделать

$myFetchedDoctrineRecord = Doctrine::getTable('Dto_MyRecord')->find(1);
//result should be $myFetchedDoctrineRecord === $myNewDoctrineRecord

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

Спасибо! Маркус


person Markus    schedule 11.10.2010    source источник


Ответы (2)


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

person reko_t    schedule 11.10.2010
comment
да, хорошая идея! но моя проблема в производительности. Я действительно хотел бы вообще не обращаться к базе данных. - person Markus; 11.10.2010
comment
Ну, единственный другой способ - создать фиктивный объект, я не думаю, что Doctrine предлагает какой-либо другой способ. Другой альтернативой может быть использование для тестов чего-то вроде базы данных памяти SQLite, потому что доступ к ней очень быстрый. - person reko_t; 11.10.2010

Если на вашей машине есть место, вы можете поместить свои объекты в $_SESSION. Но будьте осторожны, объекты Doctrine могут вырасти довольно большими.

person ITroubs    schedule 11.10.2010