PHPUnit + PHPStorm:运行/调试的不同错误

时间:2014-03-06 20:08:15

标签: php phpunit phpstorm

我开始为我的项目进行单元测试,但遇到了困难。当我单独运行时,我有一个完美运行的测试。当我运行我所拥有的大量测试时,它失败了:(我故意删除了其他代码和特定的类/变量/函数名称

class XYZTest extends PHPUnit_Framework_TestCase {
    public function setUp() {
        $xml = $this->createXML();
        //...
    }


    public function testWillFailUponRunAllTests() {
        $this->subject = new XYZ();
        $result = $this->subject->getHelpText();
        //assert this and that
    }
}

执行单项测试:完美运行。

执行所有测试:我收到了我注入的类的错误。这很奇怪,所以我想调试测试以查看发生了什么。

调试所有测试:我甚至没有收到错误,因为setUp()已经导致此错误消息:XYZTest::setUp(): Invalid State Error

显然,当我运行隔离测试时,或者在“正常”模式下运行所有​​测试时,都不会发生这种情况。仅在调试模式下!

调试单一测试:我还有另一种行为:
PHPUnit_Framework_TestResult::run(): Invalid State Error' in phar://C:/xampp/php/phpunit.phar/phpunit/Framework/TestResult.php on line 668。例如,只有在我设置断点时才会发生这种情况,而不是在我禁用断点时。似乎是一个PHPStorm错误。

我使用的是PHP 5.5.9,PHPStorm 7.1.3,PHPUnit 3.7.31,xDebug v2.2.3。我没有使用任何PHP框架。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不相信你已经正确地遵循了关于PHPUnit的教程。 setUp()函数在每次测试之前运行,因为每个测试都是隔离运行的。因此,您需要为此编写测试。

class XYZTest extends PHPUnit_Framework_TestCase {
    protected $xml;     // Internal Object for testing

    // Assume you have autoloader configured in bootstrap. If not, Require your class to test
    //require_once('YourXMLClass.php');
    public function setUp()
    {
        $this->xml = new YourXMLClass();        // Create the XML object so it exists for testing.
    }

    public function testXMLIsEmpty()
    {
        $this->assertNull($this->xml->subject);
    }

    public function testXMLSubjectSet()
    {
        $this->xml->SetSubject('Basic Text to be returned as XML subject field');
        $this->assertEquals('<subject>Basic Text to be returned as XML subject field</subject>', $this->xml->subject);
    }
}

我的测试中的假设是您的类中有一个SetSubject方法,它将参数添加到XML的主题字段中。 IE:

public function SetSubject($SubjectText)
{
    $this->subject = '<subject>' . $SubjectText . '</subject>';
}