2014-03-25 21 views
1

我想知道我想做什麼是可能的。我有一個單元測試由XML驅動的,如下:使用複雜的序列化對象在Visual Studio上進行數據驅動測試

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", 
      "|DataDirectory|\\MyFile.xml", 
      "TestMember", 
      DataAccessMethod.Sequential)] 
[DeploymentItem("MyFile.xml")] 
[TestMethod] 
public void Hello() 
{ 
    ... 
} 

其中myfile.xml中看起來是這樣的:

<TestMembers> 
    <TestMember> 
    <Name>Hello</Name> 
    <id>1234</id> 
    <MyComplexRow> 
     <MySerializedInstanceOfClass> 
     <BooleanProperty>true</BooleanProperty> 
     <IntProperty>8</IntProperty> 
     <MySerializedInstanceOfAnotherClass> 
      <int>23</int> 
      <bool>false</bool> 
      <double>8.0</double> 
     </MySerializedInstanceOfAnotherClass> 
     </MySerializedInstanceOfClass> 
    </MyComplexRow> 
    </TestMember> 
</TestMembers> 

現在的問題是,訪問TestContext.DataRow["Name"]工作正常,但我不能訪問TestContext.DataRow["MyComplexRow"],我得到一個Column 'MyComplexRow' does not belong to table TestMember.,因爲它不是一個「標」,但有許多方面...

那麼,有沒有什麼辦法,我可以欺騙的Visual Studio,讓他知道他處理的一個序列化實例現有課程?就像,擴展現有的類也許。

我知道我可以將它全部包裝在CDATA中,然後將其反序列化,但是,它並沒有那麼優雅。

謝謝!

回答

0

我建議using XUnitXUnit.Extensions,都可以通過nuget獲得。

裝飾的測試方法爲[Theory][ClassData]將讓你的願望,你指定源複雜,讓你處理你希望如何反序列化(在這種情況下,在這裏)你的XML源。然後,您可以將預期結果作爲測試方法的參數注入。您還將遍歷對象的「行」,再次由您決定要視爲一行的內容。

嗯,我不確定這是很容易理解的,但你應該看看this small blog post,它清楚地解釋了你如何處理它。

結論:XUnit是一個很棒的測試框架,它將很好地集成到Visual Studio測試面板等等。語法也大多相同。另外,它是免費的。