新しい Win8 ストア アプリの単体テストを行っているときに、回避したい競合状態に気付きました。したがって、この競合状態を回避する方法を探しています。
インスタンス化されたときにメソッドを呼び出して、ローカルの StorageFolder があることを確認するクラスがあります。私の単体テストは、オブジェクトをインスタンス化し、フォルダーがそこにあるかどうかをテストするだけです。フォルダーがそうでない場合もあれば、そうである場合もあります。これは、CreateFolderAsync が (明らかに) 非同期であるため、競合状態であると考えられます。
public class Class1
{
StorageFolder _localFolder = null;
public Class1()
{
_localFolder = ApplicationData.Current.LocalFolder;
_setUpStorageFolders();
}
public StorageFolder _LocalFolder
{
get
{
return _localFolder;
}
}
async void _setUpStorageFolders()
{
try
{
_localFolder = await _localFolder.CreateFolderAsync("TestFolder", CreationCollisionOption.FailIfExists);
}
catch (Exception)
{
throw;
}
}
}
私の単体テストは次のようになります。
[TestMethod]
public void _LocalFolder_Test()
{
Class1 ke = new Class1();
// TODO: Fix Race Condition
StorageFolder folder = ke._LocalFolder;
string folderName = folder.Name;
Assert.IsTrue(folderName == "TestFolder");
}