• MVVM模式下的OpenFileDialog


    对于MVVM模式下的ViewModel层来说,是不应该直接访问OpenFileDialog或者FolderBrowserDialog的,否则VM会变得难以测试。

    参考StackOverFlow,对ViewModel进行改造,使OpenFileDialog动作也可以测试。

    首先实现接口IIOService

        public interface IIOService
        {
            string OpenFileDialog(string srcFilter = "");
    
            IList<string> OpenFileDialogMultiselect(string srcFilter = "");
    
            string FolderBrowserDialog();
        }
    IIOService

    在工程中实现该接口IOService

       public class IOService : IIOService
        {
            public string OpenFileDialog(string srcFilter = "")
            {
                var op = new System.Windows.Forms.OpenFileDialog();
                op.Filter = srcFilter;
                if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)            
                    return op.FileName;
                
                return "";
            }
    
            public IList<string> OpenFileDialogMultiselect(string srcFilter = "")
            {
                var op = new System.Windows.Forms.OpenFileDialog();
                op.Filter = srcFilter;
                op.Multiselect = true;
                if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    return op.FileNames;
                return new List<string>();
            }
    
            public string FolderBrowserDialog()
            {
                var path = new System.Windows.Forms.FolderBrowserDialog();
                var result = path.ShowDialog();
                if (result == System.Windows.Forms.DialogResult.OK)            
                    return path.SelectedPath;
                
                return string.Empty;
            }
        }
    IOService

    这样就可以在测试的时候给VM注入一个实现该接口的桩对象,进而进行测试啦。

  • 相关阅读:
    决定迁移过来,深耕于此。。。
    一篇搞定MongoDB
    一篇搞定vue请求和跨域
    自定义全局组件
    一篇搞定vue-router
    一篇搞定Vuex
    vue系列
    .Vue.js大全
    一篇搞定spring Jpa操作数据库
    自定义admin
  • 原文地址:https://www.cnblogs.com/zhuyc110/p/5251317.html
Copyright © 2020-2023  润新知