0

我正在编写一个使用 XSLT 的程序,并且需要在 Xspec 中测试结果文档调用的内容。在下面的示例中,我想测试 result.xml 的内容。如果这是可能的,你如何做到这一点?

XML:测试.xml

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

XSLT:结果文档.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>

规格:

<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>
4

1 回答 1

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 的内容”;只是 XSLT 对您在 XSPEC 本身中指定的输入的行为。

于 2015-03-31T09:35:06.050 回答