2017-10-19 44 views
0

我有一个类,它看起来像这样:单元测试和现场运行给不同的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.") 

有人能看到为什么会这样?

回答

0

我更换测试结果在单元测试与此

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") 

原来这是双引号,我周围有使用字符串格式单引号。