我想选择一个文件来测试应用程序的部分单元。这怎么会造成僵局。
如果我将断点放在CoreApplication
行(在Assert.IsNotNull之前)并按F10开始调试它不会死锁,但是我没有断点就死了。
如果我将方法标记为async
并等待结果,我会InvalidOperationException
说
在意外时间调用了一个方法。
我该如何解决这个问题?
private StorageFile file;
//[TestMethod, TestCategory("Basics")]
public void T01_PickFile()
{
// initialize picker
var picker = new FileOpenPicker
{
SuggestedStartLocation = PickerLocationId.Desktop,
ViewMode = PickerViewMode.List
};
picker.FileTypeFilter.Add(".txt");
// grant access and pick file
// deadlock if there is no breakpoint
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
file = picker.PickSingleFileAsync().GetAwaiter().GetResult();
}).GetAwaiter().GetResult();
Assert.IsNotNull(file);
}
更新
如果我异步等待结果,应用程序不会等待并继续执行,然后选择我的文件并且Assert.IsNotNull(file)
未通过测试。
注意:我看到FileOpenPicker出现了一秒钟然后测试失败。
//[TestMethod, TestCategory("Basics")]
public async Task T01_PickFile()
{
// initialize picker
var picker = new FileOpenPicker
{
SuggestedStartLocation = PickerLocationId.Desktop,
ViewMode = PickerViewMode.List
};
picker.FileTypeFilter.Add(".mid");
// grant access and pick file
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
{
file = await picker.PickSingleFileAsync();
});
Assert.IsNotNull(file);
}
这就是我称之为这种方法的方法
[TestMethod, TestCategory("Basics")]
public async Task T02_OpenTest()
{
await T01_PickFile();
}