How to create a mock object of a doctrine entity?(如何创建学说实体的模拟对象?)
问题描述
我正在尝试使用 phpunit 为使用学说 2 的模型编写单元测试.我想模拟学说实体,但我真的不知道如何执行此操作.谁能向我解释我需要怎么做?我正在使用 Zend 框架.
I'm trying to write a unit test with phpunit for a model that uses doctrine 2. I want to mock the doctrine entities but I really don't have a clue of how to do this. Can anyone explain to me how I need to do this? I'm using Zend Framework.
需要测试的模型
class Country extends App_Model
{
public function findById($id)
{
try {
return $this->_em->find('EntitiesCountry', $id);
} catch (DoctrineORMORMException $e) {
return NULL;
}
}
public function findByIso($iso)
{
try {
return $this->_em->getRepository('EntitiesCountry')->findOneByIso($iso);
} catch (DoctrineORMORMException $e) {
return NULL;
}
}
}
Bootstrap.php
protected function _initDoctrine()
{
Some configuration of doctrine
...
// Create EntityManager
$em = EntityManager::create($connectionOptions, $dcConf);
Zend_Registry::set('EntityManager', $em);
}
扩展模型
class App_Model
{
// Doctrine 2.0 entity manager
protected $_em;
public function __construct()
{
$this->_em = Zend_Registry::get('EntityManager');
}
}
推荐答案
Doctrine 2 实体应该像任何旧类一样对待.您可以像 PHPUnit 中的任何其他对象一样模拟它们.
Doctrine 2 Entities should be treated like any old class. You can mock them just like any other object in PHPUnit.
$mockCountry = $this->getMock('Country');
从 PHPUnit 5.4 开始,getMock() 方法已被弃用.请改用 createMock() 或 getMockbuilder().
As of PHPUnit 5.4, the method getMock() has been depricated. Use createMock() or getMockbuilder() instead.
正如@beberlei 所指出的,您在 Entity 类本身中使用 EntityManager,这会产生许多棘手的问题,并且破坏了 Doctrine 2 的主要目的之一,即 Entity 不关心自己的持久性.这些查找"方法确实属于 存储库类.
As @beberlei noted, you are using the EntityManager inside the Entity class itself, which creates a number of sticky problems, and defeats one of the major purposes of Doctrine 2, which is that Entity's aren't concerned with their own persistance. Those 'find' methods really belong in a repository class.
这篇关于如何创建学说实体的模拟对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何创建学说实体的模拟对象?


基础教程推荐
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01