我随处可见(包括在官方文档上)默认情况下,PHP中应该包含PDO_SQLITE驱动程序.
但是,当我看着我时extension_directory,我只看到这些文件:
gd.so mcrypt.so mysqli.so mysql.so pdo_mysql.so pdo.so
因此,我正在尝试安装的框架(Symfony)告诉我,我需要安装PDO_SQLITE或SQLite3 .so扩展...
有人可以帮忙吗?我可以尝试在网络上的某个地方找到所需的.so文件,将其放在我的extensions_directory中,然后将其包含在php.ini中吗?
BTW:我正在通过ubuntu上的apt-get运行php 5.3.6.
我正在为Symfony2项目进行测试,现在我正在寻找一种方法来创建涉及实体对象的测试而不会持久化它们.问题是:id是一个私有字段,没有setter.我可以创建新对象并设置一些属性,但我无法测试涉及getId()调用的任何内容.
$entity = new TheEntity();
// Can't set ID!
$entity->setProperty('propertyValue');
$name = $entity->getProperty(); // OK
$id = $entity->getId(); // not OK - null
Run Code Online (Sandbox Code Playgroud)
我所知道的决议:
建议的处理方法是什么,如何使用set ID以干净,快速的方式获取实体进行测试?
编辑
原来我可以用嘲笑来解决这个问题......对不起,我还在学习.我一直在寻找一种干净,标准,快速的方法来完成任务.但是我忘记了第二个参数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;
}
Run Code Online (Sandbox Code Playgroud)
当创建同一个类的许多实体时,事情当然可以通过更多辅助方法来简化,例如:
protected function getTheEntityMock($id)
{
return $this->getEntityMock('\The\NameSpace\TheEntity', $id);
}
Run Code Online (Sandbox Code Playgroud)
唯一的限制是实体本身不能使用 …
测试与Symfony2的数据库交互的当前最佳实践是什么?我有一个简单的CRUD设置,我想确保我的测试没问题.现在,我有4个测试,每个测试确保创建,更新,删除和列出操作正常.
在我的测试用例中,我有两个神奇的方法,__ construct和__destruct.在它们内部,我使用'php app/console ...'调用exec()以创建数据库,创建模式,然后删除数据库.然而,这很慢,当我有一个以上的测试用例时它会一直发生.
在数据库测试和隔离此类测试时,我应该如何进行?