2017-10-19 8 views
0

I ont une classe qui ressemble à ceci:tests unitaires et exécuter en direct donnant différents parse XML résultats

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 

Je suis en train d'analyser XML dans un List(Of TestResult). Le fait est que, selon le type d'exécution (test ou live), j'obtiens des résultats différents à chaque fois. Avec la course en direct me donnant les résultats attendus.

Voici la fonction qui analyse le XML dans un 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 

Voici le 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> 

Lors de l'exécution du code à partir d'un test unitaire il exact Parsis dans le List(Of TestResult)

Mais la propriété SelectedValues contient une liste du type XML et de la valeur. Alors que vivre est juste la valeur.

Voici un exemple:

résultat du test unitaire:

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

en direct:

{2} 

La seule chose que je pourrais peut-être pourquoi ce qui se passe est parce que j'ai eu mettre le XML dans mon test unitaire avec des guillemets doubles pour l'empêcher d'échapper la chaîne.

Voici mon code de test unitaire:

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

Quelqu'un peut-il voir pourquoi cela se passe?

Répondre

0

I remplacé les résultats des tests en test unitaire avec ce

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

Turns out ce sont les guillemets doubles, je suis autour de lui en utilisant le format de chaîne avec des guillemets simples.