我开始为我的项目进行单元测试,但遇到了困难。当我单独运行时,我有一个完美运行的测试。当我运行我所拥有的大量测试时,它失败了:(我故意删除了其他代码和特定的类/变量/函数名称)
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框架。在此先感谢您的帮助!
答案 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>';
}