我最近通过Composer在PHPStorm中设置了PHPUnit。
我正在尝试测试一些需要我引导Processwire(CMS)的功能。
我不断收到消息“你不能序列化或反序列化PDO实例”,尽管我应用下面研究的条件是解决这个问题的正确方法。
* @backupGlobals disabled
* @backupStaticAttributes disabled
* @runTestsInSeparateProcesses
* @runInSeparateProcess
* @preserveGlobalState disabled
还有什么我错过或需要做的才能让它发挥作用吗?
这些是我到目前为止所引用的资源。
https://phpunit.de/manual/current/en/phpunit-book.html#appendixes.annotations.preserveGlobalState
http://edmondscommerce.github.io/php/phpunit-and-pdoexception-solution.html
我看过这篇文章将我的文章标记为重复,但我不相信它是相同的: PDOException: You cannot serialize or unserialize PDO instances
该文章中的测试直接引用了PDO对象,而我只是试图通过对Processwire的引导引用来运行我的测试。 这是我试图运行的测试:
namespace Test;
include_once(__DIR__."/../../../../index.php"); //Bootstrap to Processwire CMS
class ImageTest extends \PHPUnit_Framework_TestCase {
/**
* @backupGlobals disabled
* @backupStaticAttributes disabled
* @runTestsInSeparateProcesses
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
protected function setUp()
{
//$this->testpages = wire(pages)->find("template=fingergames|template=songs|template=poems");
}
public function testImageEmptyLinks()
{
//$testpages = wire(pages)->find("template=fingergames|template=songs|template=poems");
$blanks = wire(pages)->find("image=''");
$this->assertEquals($blanks->count(),0);
}
public function testImageMismatchedLinks()
{
//$this->assertTrue(true);
$this->assertEquals(0,0);
}
public function testImageMissingSiblings()
{
$this->assertEquals(0,0);
}
protected function tearDown()
{
}
}
答案 0 :(得分:4)
我终于明白了!无论出于何种原因,在测试中设置测试环境变量都没有效果。
通过创建phpunit.xml配置,定义测试参数并在Phpstorm中创建对它的引用,我终于能够运行测试了。
供参考,这是我的phpunit.xml
的内容<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.5/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
processIsolation="false">
</phpunit>
我认为放置文件的位置并不重要,但我把它放在我的测试所在的测试文件夹中。
我必须通过浏览菜单(Language&amp; Framework - &gt; PHP - &gt; PHPUnit)在PHPStorm中引用它,然后在Custom Autoloader部分中选择默认配置文件并将其指向phpxml文件。如果您使用的是其他方法,请转到该菜单并在那里设置默认配置。
希望这可以帮助那些人,因为没有太多关于PHPUnit&amp; amp; PHPStorm结合在一起。