Winforms 如何测试Windows窗体应用程序中长时间运行的后台进程的用户体验?
我正在开发一个.NET Windows窗体应用程序。 我使用模型视图演示者设计模式, 更准确地说,是监控控制器 我的应用程序中的演示者执行后台操作, 这可能需要几秒钟(或更长时间)才能完成。 后台进程完成后,演示者调用视图上的调用, 向其传递呈现/更新表单所需的所有数据。 这一切都很好 现在,我想能够测试用户体验, 关于这些长期运行的后台进程。 例如,我想看看UI的外观和行为, 当一个或多个后台进程正在运行时 为此,我在演示者中加入了一些Thread.Sleep(..)调用, 由Winforms 如何测试Windows窗体应用程序中长时间运行的后台进程的用户体验?,winforms,mvp,user-experience,Winforms,Mvp,User Experience,我正在开发一个.NET Windows窗体应用程序。 我使用模型视图演示者设计模式, 更准确地说,是监控控制器 我的应用程序中的演示者执行后台操作, 这可能需要几秒钟(或更长时间)才能完成。 后台进程完成后,演示者调用视图上的调用, 向其传递呈现/更新表单所需的所有数据。 这一切都很好 现在,我想能够测试用户体验, 关于这些长期运行的后台进程。 例如,我想看看UI的外观和行为, 当一个或多个后台进程正在运行时 为此,我在演示者中加入了一些Thread.Sleep(..)调用, 由#IF DEBU
#IF DEBUG
编译符号包围。
我不喜欢这样,因为它会弄乱我的代码,
它很难维护,并且很容易泄漏到生产代码中
您有更好的解决方案来测试用户体验吗
关于winforms应用程序中长时间运行的后台进程?我仍然对任何答案感兴趣,但现在我将发布我当前的解决方案 演示者现在不再从演示者内部启动后台进程,而是将其委托给ActionManager 如果我想测试ux,我使用ActionManager运行应用程序,该应用程序在执行命令之前有一秒的延迟。这允许我检查ui的行为 这解决了我的问题。演示者现在看起来像这样:
internal class ItemListPresenter : IItemListPresenter
{
// member variables
// ...
public ItemListPresenter(IItemListView itemListView, IActionManager cmdManager)
{
_view = itemListView;
_mngr = cmdManager;
_syncCtxt = SynchronizationContext.Current; // let's assume we're constructed from the UI thread.
}
// IItemListPresenter method:
public void StartLoadingItemsSession()
{
ShowBusy();
ClearResults();
_mngr.Post(LoadItems);
}
// ...
private void LoadItems()
{
UpdateViewWith(GetItems());
SetReady();
}
// ...
// IItemListView method
private void UpdateViewWith(Item[] newItems)
{
_syncCtxt.Post(state => _view.AddResults(newItems), newItems);
}
// ...
}
我认为,这个解决方案有更好的关注点。