2017-08-17 41 views
0

所以我有一個問題,我沒有能夠找到一個解決方案後搜索互聯網。主要問題是當我使用自定義類型創建XmlSerializer時,它會失敗,沒有理由。這隻發生在我創建的調用此函數的單元測試中。在正在使用的應用程序中,代碼按預期執行,並且全世界都很好。下面是一些代碼片段,顯示正在發生的事情。XmlSerializer問題在單元測試

public class ClassA 
{ 
    [XmlAttribute] 
    public string Id { get; set; } 

    public ClassA() 
    { 
     Id = string.Empty; 
    } 
} 

public class ClassB 
{ 
    [XmlAttribute] 
    public string Id { get; set; } 

    public ClassB() 
    { 
     Id = string.Empty; 
    } 
} 

public class SerializeClass 
{ 
    [XmlElement] 
    public string RandomString { get; set; } 

    [XmlArray] 
    public List<ClassA> ClassAs { get; set; } 
    [XmlArray] 
    public List<ClassB> ClassBs { get; set; } 

    [XmlIgnore] 
    public Int32 Count { get; set; } 

    public SerializeClass() 
    { 
     RandomString = string.Empty; 
     ClassAs = new List<ClassA>(); 
     ClassBs = new List<ClassB>(); 
     Count = 0; 
    } 
} 


public class XmlReaderClass 
{ 
    private SerializeClass _serializeClass; 

    public async Task<bool> Initialize() 
    { 
     bool loaded = false; 

     // If the rules are empty create and load them. 
     if (_rules == null) 
     { 
      _rules = new Rules(); 

      StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///FileToReadIn.xml")); 
      Stream stream = await file.OpenStreamForReadAsync(); 

      XmlSerializer serializer = new XmlSerializer(typeof(SerializeClass)); 
      XDocument document = XDocument.Load(stream); 
      _serializeClass = (serializer.Deserialize(document.CreateReader()) as SerializeClass); 

      loaded = true; 
     } 
     else 
     { 
      loaded = true; 
     } 

     return loaded; 
    } 
} 

所以只有當單元測試並初始化功能的上線失敗,並

XmlSerializer serializer = new XmlSerializer(typeof(SerializeClass));. 

我需要在這個XML閱讀到相關的XML文件中的數據功能進行單元測試。

+0

你能告訴我們確切的錯誤嗎? –

+0

它沒有給出錯誤,測試只是停止,它顯示測試爲通過。 – tldragoon

+0

哦!這是因爲你正在使用異步方法!你需要做測試處理。將測試方法的頭部改爲'public async Task MyTest()'應該可以解決這個問題。 –

回答

0

因爲你的方法是一個異步方法,你需要確保測試框架可以等待它。要做到這一點,你應該使測試方法的簽名是這樣的:

public async Task MyTest()