XSLT:在XSpec中测试结果文档的内容?

时间:2015-03-17 18:58:34

标签: xslt xspec

我正在编写一个使用XSLT的程序,需要在Xspec中测试结果文档调用的内容。在下面的示例中,我想测试result.xml的内容。如果可以的话,你怎么做?

XML:test.xml

<?xml version="1.0" encoding="UTF-8"?>
<root></root>

XSLT:result-document.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="2.0">
    <xsl:template match="/root">
        <xsl:result-document href="result.xml">
            <my-result></my-result>
        </xsl:result-document>
    </xsl:template>
</xsl:stylesheet>

XSpec:

<x:description xmlns:x="http://www.jenitennison.com/xslt/xspec" stylesheet="result-document.xsl">
    <x:scenario label="Test result document">
        <x:context href="test.xml"></x:context>
        <!-- How do you test the result.xml file here? -->
        <x:expect label="test result">
            <my-result></my-result>
        </x:expect>
    </x:scenario>
</x:description>

1 个答案:

答案 0 :(得分:1)

我一直在寻找相同的答案,但我怀疑这是XSpec实施方式的固有限制。

我怀疑解决方法是使用一个使用结果文档的不可测试模板,然后在结果文档中使用匹配或调用模板进行测试:

<强> XSLT

<xsl:template match="/root">
    <xsl:result-document href="result.xml">
        <xsl:call-template name="my-result"/>
    </xsl:result-document>
</xsl:template>

<xsl:template name="my-result">
  <!-- content -->
</xsl:template>

<强> XSPEC

<x:scenario label="when calling my-result">
  <x:call template="my-result"/>
  <x:expect label="test something" pending="add your tests here"/>
</x:scenario>

因此,您无法真正测试结果文档是否以正确的方式制作,但您可以检查其结果。

请注意,XSPEC不会逐字“测试result.xml的内容”;只是您在XSPEC本身中指定的输入上的XSLT行为。