symfony – 如何创建没有持久化的Doctrine实体的测试(如何设置id
我正在研究Symfony2项目的测试,现在我正在寻找一种方法来创建涉及实体对象的测试,而不会坚持它们.问题是:id是一个私有字段,没有setter.我可以创建新对象并设置一些属性,但是我无法测试涉及getId()调用的任何内容.
$entity = new TheEntity(); // Can't set ID! $entity->setProperty('propertyValue'); $name = $entity->getProperty(); // OK $id = $entity->getId(); // not OK - null 我知道的决议: >初始化整个内核(Symfony的WebTestCase :: createKernel())并持久化实体 有什么建议的方法来处理这个问题,如何以干净,快速的方式获得测试实体? 编辑 原来我可以用嘲笑解决这个…抱歉,我还在学习.我正在寻找一个干净,标准,但快速的方式来完成工作.但是我忘记了getMock()的第二个参数 – 那就是我不必模拟我要使用的实体的每一个方法.我想避免多个 – > expects() – > method() – > will()等.这是通过添加:array(‘getId’)来实现的.这个帮助方法解决了这个问题: protected function getEntityMock($entityClass,$id) { $entityMock = $this->getMock($entityClass,array('getId')); $entityMock ->expects($this->any()) ->method('getId') ->will($this->returnValue($id)); return $entityMock; } 当创建同一个类的许多实体时,当然可以通过像这样的更多帮助方法来简化事情: protected function getTheEntityMock($id) { return $this->getEntityMock('TheNameSpaceTheEntity',$id); } 唯一的限制是实体本身不能使用id属性,只能使用getId()getter. 任何有价值的输入仍然受欢迎,但我相信PHPUnit的getMock()解决了这个很好.
您可以在应用程序/ config / config_test.yml中配置原则以使用内存中的数据库.
# app/config/config_test doctrine: dbal: driver: pdo_sqlite path: :memory: memory: true 这样可以加快进程速度,并且可以在setUp()方法中快速地保留一些装置,该方法将在自动生成的id之后刷新所有数据,而不会弄乱“真实”数据库. 您可以在this answer和this blog post找到一些灵感. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- PHP编程:分享ThinkPHP3.2中关联查询解决思路
- php中实现xml与mysql数据相互转换的方法
- PHP获取数组最后一个值的2种方法
- 解决PHP mysql_query执行超时(Fatal error: Maximum execut
- utf-8(PHP,str_replace)中是否有不同类型的双引号?
- PHP使用preg_split和explode分割textarea存放内容的方法分析
- PHP简单实现断点续传下载的方法
- [php]Windows环境下Composer的安装教程
- 在phpmyadmin 4.0.5中禁用ajax
- PHP+shell脚本操作Memcached和Apache Status的实例分享