xspec:预期和结果相同时失败
xspec: failure when expected and result are the same
我使用 xspec 来测试样式表。大多数时候它工作正常,但偶尔测试会在没有正当理由的情况下失败:预期结果和实际结果相同。貌似:比较屏里什么都是绿色的。
在那种情况下,我通常会在尝试各种方法后让它重新工作,但不知道发生了什么变化 'did it'.
如果 xspec 报告失败的原因,那将是最有帮助的,但如果你能帮助我(而不是 xspec 输出)对此有所启发,我将非常高兴。
这是一个简化的测试用例:
xsl:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:uc="http://www.infinity-loop.de/namespace/upcast/4.0/"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:html="http://www.w3.org/HTML/1998/html4"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="uc xlink html xs xsl">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="bezwaar">
<xsl:variable name="content">
<xsl:element name="{name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:variable>
<xsl:copy-of select="$content"/>
</xsl:template>
<xsl:template match="@*" >
<xsl:attribute name="{name()}" namespace="{namespace-uri()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
xspec:
<?xml version="1.0" encoding="UTF-8"?>
<x:description
xmlns:x = "http://www.jenitennison.com/xslt/xspec"
stylesheet="file:/home/rdgon/project/kraak/kraak-xslt/publicatiebladen/staatscourant/stcrt_step2.xsl">
<x:param name='ns' select="false()"/>
<x:scenario label='test'>
<x:scenario label='werkt dit'>
<x:context><bezwaar>
<al>Noem in het bezwaarschrift:</al>
<al nadruk="cur">Vergeet niet te ondertekenen.</al>
</bezwaar>
</x:context>
<x:expect>
<bezwaar>
<al>Noem in het bezwaarschrift:</al>
<al nadruk="cur">Vergeet niet te ondertekenen.</al>
</bezwaar>
</x:expect>
</x:scenario>
</x:scenario>
</x:description>
测试报告显示失败:
你能解释一下我没看到什么吗?
路德
如果您有 运行 您的 XSL,那么 bezwaar 元素出现 2 次并出现额外的命名空间,因为您有 x:context 和 x:expect 在同一元素中。如果你想 x:expect 与 x:context 相同,那么你可以试试这个代码。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x = "http://www.jenitennison.com/xslt/xspec"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs x">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="x:scenario">
<xsl:apply-templates select="x:scenario/x:context/bezwaar"/>
</xsl:template>
<xsl:template match="bezwaar">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="al">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
或如果你想要bezwaar多次那么你可以评论第一个模板匹配。
因为 xsl:variable
没有 @as
,您的结果是一个文档节点。但是您的 x:expect
需要一个元素。
如果你想让你的x:expect
期待一个文档节点,你需要添加select="/"
到x:expect
。在 XSpec Wiki.
中寻找解释 "If you specify no @select"
我使用 xspec 来测试样式表。大多数时候它工作正常,但偶尔测试会在没有正当理由的情况下失败:预期结果和实际结果相同。貌似:比较屏里什么都是绿色的。 在那种情况下,我通常会在尝试各种方法后让它重新工作,但不知道发生了什么变化 'did it'.
如果 xspec 报告失败的原因,那将是最有帮助的,但如果你能帮助我(而不是 xspec 输出)对此有所启发,我将非常高兴。
这是一个简化的测试用例: xsl:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:uc="http://www.infinity-loop.de/namespace/upcast/4.0/"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:html="http://www.w3.org/HTML/1998/html4"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="uc xlink html xs xsl">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="bezwaar">
<xsl:variable name="content">
<xsl:element name="{name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:variable>
<xsl:copy-of select="$content"/>
</xsl:template>
<xsl:template match="@*" >
<xsl:attribute name="{name()}" namespace="{namespace-uri()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
xspec:
<?xml version="1.0" encoding="UTF-8"?>
<x:description
xmlns:x = "http://www.jenitennison.com/xslt/xspec"
stylesheet="file:/home/rdgon/project/kraak/kraak-xslt/publicatiebladen/staatscourant/stcrt_step2.xsl">
<x:param name='ns' select="false()"/>
<x:scenario label='test'>
<x:scenario label='werkt dit'>
<x:context><bezwaar>
<al>Noem in het bezwaarschrift:</al>
<al nadruk="cur">Vergeet niet te ondertekenen.</al>
</bezwaar>
</x:context>
<x:expect>
<bezwaar>
<al>Noem in het bezwaarschrift:</al>
<al nadruk="cur">Vergeet niet te ondertekenen.</al>
</bezwaar>
</x:expect>
</x:scenario>
</x:scenario>
</x:description>
测试报告显示失败:
你能解释一下我没看到什么吗?
路德
如果您有 运行 您的 XSL,那么 bezwaar 元素出现 2 次并出现额外的命名空间,因为您有 x:context 和 x:expect 在同一元素中。如果你想 x:expect 与 x:context 相同,那么你可以试试这个代码。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x = "http://www.jenitennison.com/xslt/xspec"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs x">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="x:scenario">
<xsl:apply-templates select="x:scenario/x:context/bezwaar"/>
</xsl:template>
<xsl:template match="bezwaar">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="al">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
或如果你想要bezwaar多次那么你可以评论第一个模板匹配。
因为 xsl:variable
没有 @as
,您的结果是一个文档节点。但是您的 x:expect
需要一个元素。
如果你想让你的x:expect
期待一个文档节点,你需要添加select="/"
到x:expect
。在 XSpec Wiki.