我编写了一个API,从另一个API获取数据并将其转换为XML。如何使用phpunit测试输出是否是预期的XML并且有效?
我应该创建一个包含所有节点的样本XML,然后检查输出是否与之匹配吗?
我编写了一个API,从另一个API获取数据并将其转换为XML。如何使用phpunit测试输出是否是预期的XML并且有效?
我应该创建一个包含所有节点的样本XML,然后检查输出是否与之匹配吗?
<person>
<eyes>blue</eyes>
<hair>
<style>curly</style>
</hair>
</person>
首先想到的是使用您拥有的代码生成XML,并将其放入测试用例中进行测试,以确保XML未更改,类似于以下内容:
function testWholeOutput() {
$person = new person();
$person->setEyes("blue");
$person->setHairStyle("curly");
$this-assertEquals(file_get_contents("data\pregenerated_xml.xml"), $person->output());
}
function testOutputPersonHasEyes() {
$person = new person();
$person->setEyes("blue");
$person->setHairStyle("curly");
$this->assertTag(
array('tag' => 'person',
'child' => array('tag' => 'eyes')
),
$person->output());
}
<person>
<hair>
<style>curly</style>
</hair>
<eyes>blue</eyes>
</person>
将XML字符串加载到simplexml对象中。
$object = simplexml_load_string($xml);
$this->assertNotFalse($object);
$this->assertInstanceOf( \SimpleXMLElement::class, $object);
$this->assertObjectHasAttribute("vehicle", $object);
//...
我会这样做: 1)你的类应该使用:myClass extends PHPUnit_Framework_TestCase, 2)然后所有的测试必须以[test]Function开头,例如像这样:
function testFunction()
{
$testXml = '<xml><message>Hi there PHP</message></xml>';
$xml = simplexml_load_string($testXml, 'SimpleXMLElement', LIBXML_NOCDATA);
if ($xml !== false && isset($xml->message)) {
//either this
var_dump($xml->message);
$this->assertEquals('Hi there PHP', $xml->message);
//or this, should be stdClass
$xmlObj = json_decode(json_encode((array) xml), 1);
var_dump($xmlObj->message);
$this->assertEquals('Hi there PHP', $xmlObj->message);
}
}
assertSelectEquals()
而不是phpunit
的assertTag()
(现已弃用)来测试标记的内容。person
中的eyes
标记,而不是:$this->assertTag(
array('tag' => 'person',
'child' => array('tag' => 'eyes')
),
$person->output());
}
$this->assertSelectCount(
'person > eyes',
true,
$person->output()
);
要特别寻找棕色的眼睛,请执行以下操作:
$this->assertSelectEquals(
'person > eyes',
'brown',
true,
$person->output()
);
assertTag()
的替代方案? - Jodes