我有一个非常小的PHPUnit测试,如下所示:
<?php
namespace VNN\PressboxBundle\Tests\Entity;
namespace VNN\PressboxBundle\Entity;
use VNN\PressboxBundle\Entity\User;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Phactory\Sql\Phactory;
class UserTest extends EntityTest
{
public function testCreate()
{
Phactory::reset();
}
}
当我尝试运行它时,我明白了:
There was 1 error:
1) VNN\PressboxBundle\Entity\UserTest::testCreate
ErrorException: Runtime Notice: Non-static method Phactory\Sql\Phactory::reset() should not be called statically, assuming $this from incompatible context in /Users/jason/Web/pressbox/src/VNN/PressboxBundle/Tests/Entity/UserTest.php line 13
这是怎么回事?所有的文档都静态地称之为。
我在Symfony 2.0上这样做,如果这有所不同。
答案 0 :(得分:0)
文档说您应该直接使用Phactory
下的顶级lib/
类 - 而不是基于{{1}实例化Phactory/Sql/Phactory
的单个实现。您传递给PDO
的对象。变化
setConnection
到
use Phactory\Sql\Phactory;
主类位于全局命名空间中,不需要require_once 'Phactory/lib/Phactory.php';
语句。
答案 1 :(得分:0)
https://github.com/chriskite/phactory/issues/30
从代码中,setConnection,define和create不是静态函数,但是README和网站指南没有反映出来。
e.g。测试代码 https://github.com/chriskite/phactory/blob/next/tests/Phactory/Sql/PhactoryTest.php
use Phactory\Sql\Phactory;
...
$this->pdo = new \PDO("sqlite:test.db");
$this->phactory = new Phactory($this->pdo);
$this->phactory->define('user');
$this->phactory->reset();
我不知道它何时被更改。
反正太迟了......
答案 2 :(得分:0)
当前版本0.3.2与向后记录的静态方法结构不向后兼容。
这是破解提交:https://github.com/chriskite/phactory/commit/d3b60eeedea955ab7b5803ec29446d19888d3849
不幸的是,文档尚未在http://phactory.org上更新,并且pearhub repo不再可用。
我会查看测试示例:https://github.com/chriskite/phactory/blob/next/tests/Phactory/Sql/PhactoryTest.php