单元测试UWP时使用FileOpenPicler的死锁

时间:2017-04-24 05:34:25

标签: c# unit-testing uwp fileopenpicker

我想选择一个文件来测试应用程序的部分单元。这怎么会造成僵局。

如果我将断点放在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();
}

0 个答案:

没有答案