我正在为 Symfony2.0 项目开发一些测试并使用 PHPUnit 运行它们。
在我的电脑上工作正常,但在其他环境中尝试测试失败。我以为问题出在 php 版本上,但是在不同的环境中运行它们后,我迷路了。
我的环境是 Ubuntu 12.04 和 PHP 5.3.10 =>工作正常。
2 台装有 Ubuntu 12.10 和 PHP 5.4.6 的电脑:
Fatal error: Call to a member function get() on a non-object
此错误出现在扩展Symfony\Bundle\FrameworkBundle\Test\WebTestCase的类上,其中覆盖了 setUp() 和 tearDown() 方法。
public function setUp()
{
$this->client = static::createClient();
$this->client->followRedirects(true);
$crawler = $this->client->request('GET', '/admin/login');
$loginForm = $crawler->selectButton('save')->form(array(
'_username' => 'user',
'_password' => 'pass'
));
$this->client->submit($loginForm);
$this->container = $this->client->getContainer();
parent::setUp();
}
public function tearDown()
{
//Here is get() on a non-object, $this->container doesn't exists
$this->container->get('doctrine.odm.mongodb.document_manager')->getConnection()->close();
parent::tearDown();
}
2 台 PC,一台装有 Ubuntu 12.10 和 PHP 5.4.6,另一台装有 Windows 7 和 PHP 5.3.8:
PHP Fatal error: Call to a member function getSite() on a non-object
此错误发生在扩展上述类的类上,该类的 tearDown() 方法错误,但在这种情况下,此类有效,错误不同,尽管与 $this->container 相关:
//In this case, the user doesn't exists
$site = $this->container->get('security.context')
->getToken()->getUser()->getSite();
问题是我不知道这是为什么。如果这与 PHP、PHPUnit(我们都有相同的版本)、Symfony2.0 或 SO 有关。
编辑:
好的,问题解决了。
第一的:
Fatal error: Call to a member function get() on a non-object
在具有 setUp() 和 tearDown() 方法的类中有错误的代码行。像这样的一行:
$link = $crawler->filter('a:contains("Test")')->eq(1)->link();
我评论了这一行,对不起:)。但我不知道为什么 PHPUnit 显示这个错误而不是链接方法的错误。
第二:
PHP Fatal error: Call to a member function getSite() on a non-object
在其他环境中,尚未部署测试数据库。
这个问题不会帮助任何人,但会帮助我尝试新事物。谢谢!