Использование <x :pect test = "" /> в Xspec - PullRequest
0 голосов
/ 08 мая 2018

, пожалуйста, помогите мне с синтаксисом xspec. Я хочу сравнить значения в тестовом файле с константой: Тестовый файл:

<?xml version='1.0' encoding='ISO-8859-5'?>
<List>
    <M_INSDES>
        <S_UNH>
            <D_0062>3600</D_0062>
            <C_S009>
                <D_0065>INSDES</D_0065>
                <D_0052>D</D_0052>
                <D_0054>96A</D_0054>
                <D_0051>UN</D_0051>
                <D_0057>EAN001</D_0057>
            </C_S009>
        </S_UNH>
    </M_INSDES>
</List>

Следующий сценарий работает как ожидалось:

    <x:scenario label="Scenario for testing an EDIFACT document type">
        <x:context href="test.xml" select="/List/M_INSDES/S_UNH/C_S009/D_0065">
        </x:context>        
        <x:expect label="The result of testing EDIFACT document type">INSDES</x:expect>                 
    </x:scenario>

Successful test

Но сценарий с умножением значений завершается неудачей:

<x:scenario label="Scenario for testing an EDIFACT document type for inbound file">
    <x:context href="test.xml" select="/List/M_INSDES/S_UNH/C_S009">
    </x:context>        
    <x:expect label="Message type identifier" test="D_0065 = 'INSDES'"></x:expect> 
    <x:expect label="Message type version number" test="D_0052 = 'D'"></x:expect>            
    <x:expect label="Message type release number" test="D_0054 = '96A'"></x:expect>                     
</x:scenario>

Failed test

Как проверить три значения узла C_S009 с помощью <x:expect test = ""/>?

UPD .: добавлена ​​таблица стилей 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"
    xmlns:my="myfunctions"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:template match="/">
        <xsl:copy-of select="."/> 
    </xsl:template>
</xsl:stylesheet>

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Не могли бы вы опубликовать код XSLT, который вы тестируете с помощью теста XSpec? Трудно воспроизвести его без XSLT.

Если вы проверяете атомарное значение (то есть строку в вашем случае), вас может заинтересовать использование атрибута select элемента x:expect, как описано в документации XSpec .

0 голосов
/ 09 мая 2018

Я думаю, что вы все делаете правильно, но контекст ваших относительных xpaths неверен. Попробуйте использовать абсолютные пути в элементах expect , например, и , выбрав корневой элемент :

<x:scenario label="Scenario for testing an EDIFACT document type for inbound file">
    <x:context href="testdata.xml" select="/">
    </x:context>        
    <x:expect label="Message type identifier" test="/List/M_INSDES/S_UNH/C_S009/D_0065 = 'INSDES'"></x:expect> 
    <x:expect label="Message type version number" test="/List/M_INSDES/S_UNH/C_S009/D_0052 = 'D'"></x:expect>            
    <x:expect label="Message type release number" test="/List/M_INSDES/S_UNH/C_S009/D_0054 = '96A'"></x:expect>                     
</x:scenario>

Я думаю, что относительные пути не работают, потому что ваша таблица стилей просто копирует весь документ при сопоставлении корневого элемента. В отчете XSpec с ошибками видно, что результатом испытаний с относительными путями являются только строковые значения элементов.

До того, как вы опубликовали свою таблицу стилей, я использовал таблицу стилей с рекурсивным шаблоном "копировать все узлы".

<xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>

С этой таблицей стилей относительные пути работают нормально.

<x:scenario label="Scenario for testing an EDIFACT document type for inbound file">
    <x:context href="testdata.xml" select="/List/M_INSDES/S_UNH/C_S009">
    </x:context>        
    <x:expect label="Message type identifier" test="C_S009/D_0065 = 'INSDES'"></x:expect> 
    <x:expect label="Message type version number" test="C_S009/D_0052 = 'D'"></x:expect>            
    <x:expect label="Message type release number" test="C_S009/D_0054 = '96A'"></x:expect>                     
</x:scenario>
...