加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

phpunit测试xml输出

发布时间:2020-12-13 13:39:21 所属栏目:PHP教程 来源:网络整理
导读:我已经编写了一个API,它从另一个API获取数据并将其转换为 XML.如何使用phpunit来测试输出是否是预期的XML并且是有效的? 我应该用所有节点创建一个样例xml,然后检查输出吗? 这是一个搜索结果,我认为可以被批准,对于遇到这个测试生成的xml进纸器功能/类的问
我已经编写了一个API,它从另一个API获取数据并将其转换为 XML.如何使用phpunit来测试输出是否是预期的XML并且是有效的?

我应该用所有节点创建一个样例xml,然后检查输出吗?

这是一个搜索结果,我认为可以被批准,对于遇到这个测试生成的xml进纸器功能/类的问题的任何人来说.

有很多方法来测试一个xml输出是否正确,比其他一些容易一些.

我最近完成了一个类似的脚本,OP在这个时候询问.

如果你有一个函数的部分xml输出(让我们称之为$person-> output()):

<person>
    <eyes>blue</eyes>
    <hair>
        <style>curly</style>
    </hair>
</person>

第一个想法是使用你必须生成的代码,并将它放入测试用例来测试,以确保xml没有改变,这样做:

function testWholeOutput() {

    $person = new person();
    $person->setEyes("blue");
    $person->setHairStyle("curly");

    $this-assertEquals(file_get_contents("datapregenerated_xml.xml"),$person->output());
}

测试通过,每个人都很开心…但是,这不允许xml的扩展.另外一个问题是您首先测试您输出的内容,这可能会导致一些进一步的问题.

如果放置了需要了解头发颜色的新功能,会发生什么?测试将中断,您将需要从脚本中执行另一个xml输出,以确认xml输出仍然正常工作.

此外,如果测试中断,那么我们不知道它在哪里破坏,只是新的字符串不同于旧的字符串.

解决方案:
phpUnit具有调用assertTag()(和assertNotTag())的功能,它将通过xml,并且可以断定标签是否存在,内容是什么,并确认它是否正确设置.如果将更多项目添加到xml输出中,以下内容将不会中断:

function testOutputPersonHasEyes() {

    $person = new person();
    $person->setEyes("blue");
    $person->setHairStyle("curly");

    $this->assertTag(
        array('tag' => 'person','child' => array('tag' => 'eyes')
            ),$person->output());
    }

assertTag这里检查一个’person’标签,它有一个小孩标签’eyes’.现在,如果您将xml输出交换为如下所示:

<person>
    <hair>
            <style>curly</style>
    </hair>
    <eyes>blue</eyes>
</person>

您仍然会通过上述测试,因为这仍然是有效的xml,并且仍然有效的输出任何正在消耗这个xml的脚本.

显然,您将需要编写测试以确保内容符合预期,并且其他项目是正确的,但结构允许较少的假阴性测试和较长的工作,尽管在开发时损失更多的时间.

对于附加功能,Tobias Schlitt wrote a great article在phpUnit中单元测试xml生成,并且还通过创建一个dom对象并使用它在测试用例类周围的包装器和使用php xPath进行测试,以及一个很好的解释,不利于这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读