繁体   English   中英

“ObservableCollection”方法的单元测试

[英]Unit test for "ObservableCollection" method

我是新来的,希望你能帮助我。 我有一个 WPF 应用程序,这是获取对象(在本例中为 TreeView)和 ItemSelectionChangedEventArgs(我在其中捕获当前文件夹)的方法。

public static ObservableCollection<Folder> OnSelectionChanged(object sender, ItemSelectionChangedEventArgs itemSelection)
    {
        if (sender == null)
        {
            throw new ArgumentNullException("Can't be null", nameof(sender));
        }
        if (itemSelection == null)
        {
            throw new ArgumentNullException("Can't be null", nameof(itemSelection));
        }

        var selected = itemSelection.AddedItems[0] as Folder;

        DirectoryInfo dirInfo = new DirectoryInfo(selected.FullName.ToString());
        ObservableCollection<Folder> directories = new ObservableCollection<Folder>();

        directories = AddDirectoryInfo(directories, dirInfo);
        directories = AddFileInfo(directories, dirInfo);
        
        return directories;
    }

我需要为这个方法编写单元测试,但是我尝试初始化参数以传输到这个方法中我有例外。

private readonly string _folderName = "C:\\NewTestFolder";
[TestMethod()]
    public void OnSelectionChangedTest()
    {
        var sender = new SfTreeView() { Name = "treeSize" };

       var itemSelection = new ItemSelectionChangedEventArgs()
        {
            AddedItems = { new Folder()
            {
                FullName = _folderName,
                HasChildrenNodes = false,
                Modified = DateTime.Now.ToString(),
                Name = "NewTestFolder",
                Size = "0",
                Type = "Folder"
            } },
            RemovedItems = { new Folder() { FullName = "" } }
        };


        var result = FolderView.OnSelectionChanged(sender, itemSelection);
    }

发件人给出错误:System.InvalidOperationException:'调用线程应该是 STA,因为大多数 UI 组件都需要它。'

itemSelection 给出错误:System.NullReferenceException:“对象引用未设置为对象的实例。”

也许我做错了什么,这些传递给方法的参数应该以其他方式设置。

首先,感谢@CharlesMager 的回答,我真的错过了我不需要“发件人”参数的事实。

对于这种情况,接下来它帮助了我,我创建了新类 ItemSelectionChangedEventArgs 并从当前基本类继承了他,然后我重新定义了变量 AdditionalItems 和 RemoveItems,因为在基本类中它们具有“内部集”,然后我初始化了新列表。

AddedItems = new List<object>()
{ 
    new Folder()
    {
        FullName = _folderName,
        HasChildrenNodes = false,
        Modified = DateTime.Now.ToString(),
        Name = "NewTestFolder",
        Size = "0",
        Type = "Folder"
    } 
},
RemovedItems = new List<object>()
{ 
    new Folder() 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM