Блокировка с помощью FileOpenPicler при модульном тестировании UWP

Я хочу выбрать файл для модульного тестирования частей приложения. Как бы то ни было, это вызывает тупик.

Если я поставлю точку останова на 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 ответов

Другие вопросы по тегам