Блокировка с помощью 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();
}