单元测试和实时运行给出不同的 XML 解析结果



我有一个看起来像这样的类:

Public Class TestResult
    Public Sub New(labelName As String, correctValues As List(Of Object))
        Me.LabelName = labelName
        Me.SelectedValues = correctValues
    End Sub
    Public Sub New()
    End Sub
    Public Property LabelName As String
    Public Property SelectedValues As List(Of Object)
End Class

我正在尝试将XML解析为List(Of TestResult)

问题是,根据执行的类型(测试或实时),我每次都会得到不同的结果。现场运行给了我预期的结果。

下面是将 XML 解析为List(Of TestResult)的函数

  Public Function ReturnTestValidResults(testID As String) As IEnumerable(Of TestResult) Implements ITestManager.ReturnTestValidResults
        Dim testValidResults = ReturnSingleRepComplianceFieldViaTestID("TestValidResults", testID)
        Dim serializer = New XmlSerializer(GetType(List(Of TestResult)))
        Dim result As List(Of TestResult)
        Using reader = New StringReader(testValidResults)
            result = serializer.Deserialize(reader)
        End Using
        Return result
    End Function

下面是 XML:

<ArrayOfTestResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <TestResult>
    <LabelName>Question1Label</LabelName>
    <SelectedValues>
      <anyType xsi:type="xsd:int">2</anyType>
    </SelectedValues>
  </TestResult>
  <TestResult>
    <LabelName>Question2Label</LabelName>
    <SelectedValues>
      <anyType xsi:type="xsd:int">2</anyType>
    </SelectedValues>
  </TestResult>
  <TestResult>
    <LabelName>Question3Label</LabelName>
    <SelectedValues>
      <anyType xsi:type="xsd:int">3</anyType>
    </SelectedValues>
  </TestResult>
  <TestResult>
    <LabelName>Question4Label</LabelName>
    <SelectedValues>
      <anyType xsi:type="xsd:boolean">true</anyType>
    </SelectedValues>
  </TestResult>
</ArrayOfTestResult>

从单元测试运行代码时,它会正确解析到List(Of TestResult)

SelectedValues 属性包含 XML 类型和值的列表。而活着只是价值。

下面是一个示例:

单元测试结果:

{Attribute, Name="xsi:type", Value="xsd:Int"}
{Text, Value="2"}

住:

{2}

我唯一可能看到为什么会发生这种情况是因为因为我不得不将 XML 放在我的单元测试中,并用双引号阻止它转义字符串。

这是我的单元测试代码:

 <TestMethod()> Public Async Function CheckSubmittedResults_SubmittedLabelsAreCorrect_ActionReturnsPassedJsonResult() As Task
        Dim testController = New TestController(_iTestManager, _ihomeManager, _iGeneralACManager)
        Dim submittedResults = New List(Of TestResult)
        Dim validResults = New List(Of TestResult)
        submittedResults.Add(New TestResult("Question1Label", New List(Of Object)() From {2}))
        submittedResults.Add(New TestResult("Question2Label", New List(Of Object)() From {2}))
        submittedResults.Add(New TestResult("Question3Label", New List(Of Object)() From {3}))
        submittedResults.Add(New TestResult("Question4Label", New List(Of Object)() From {True}))
#Region "HugeXMLString"
        Dim testResults = $"<ArrayOfTestResult xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""><TestResult><LabelName>Question1Label</LabelName><SelectedValues><anyType xsi:type=""xsd:Int"">2</anyType></SelectedValues></TestResult><TestResult><LabelName>Question2Label</LabelName><SelectedValues><anyType xsi:type=""xsd: Int"">2</anyType></SelectedValues></TestResult><TestResult><LabelName>Question3Label</LabelName><SelectedValues><anyType xsi:type=""xsd: Int"">3</anyType></SelectedValues></TestResult><TestResult><LabelName>Question4Label</LabelName><SelectedValues><anyType xsi:type=""xsd: Boolean"">true</anyType></SelectedValues></TestResult></ArrayOfTestResult>"
#End Region
        _iTestRepository.Setup(Function(x) x.ReturnSingleRepComplianceFieldViaTestID("TestValidResults", Nothing)).Returns(testResults)
        Dim result = Await testController.CompleteTest(submittedResults, Nothing)
        Assert.IsTrue(result.Data.Success = True, "Action should have passed.")

谁能明白为什么会这样?

我用这个替换了单元测试中的测试结果

Dim testResults = String.Format("<ArrayOfTestResult xmlns:xsi='{0}' xmlns:xsd='{1}'><TestResult><LabelName>Question1Label</LabelName><SelectedValues><anyType xsi:type='{2}'>2</anyType></SelectedValues></TestResult><TestResult><LabelName>Question2Label</LabelName><SelectedValues><anyType xsi:type='{3}'>2</anyType></SelectedValues></TestResult><TestResult><LabelName>Question3Label</LabelName><SelectedValues><anyType xsi:type='{4}'>3</anyType></SelectedValues></TestResult><TestResult><LabelName>Question4Label</LabelName><SelectedValues><anyType xsi:type='{5}'>true</anyType></SelectedValues></TestResult></ArrayOfTestResult>",
                                        "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/2001/XMLSchema", "xsd:int", "xsd:int", "xsd:int", "xsd:boolean")

原来是双引号,我通过使用带有单引号的字符串格式来绕过它。

最新更新