2017-08-17 6 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; 
    } 
} 

ので、ユニットテストは、初期化機能は、私はXMLファイル内のデータに関連する機能上のユニットテストを実行するには、このXMLを読み込む必要がある

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

と行に失敗しない場合のみです。

+0

正確なエラーを教えてください。 –

+0

テストが停止するだけでエラーは発生せず、テストは合格と表示されます。 – tldragoon

+0

ああ!非同期メソッドを使用しているからです!あなたはテストハンドルをそのようにする必要があります。テストメソッドのヘッダを 'public async Task MyTest()'に変更することで解決するはずです。 –

答えて

0

メソッドが非同期メソッドなので、テストフレームワークが待機できることを確認する必要があります。これを行うには、次のようにテストメソッドの署名を作成する必要があります。

public async Task MyTest() 
関連する問題