当前位置:  开发笔记 > 编程语言 > 正文

为什么在单元测试中实例化ListView时SelectedIndices和SelectedItems不起作用?

如何解决《为什么在单元测试中实例化ListView时SelectedIndices和SelectedItems不起作用?》经验,为你挑选了2个好方法。

我正在回答你自己的问题时写这个问题,因为我找到了问题的解决方案,但如果有人有更好的解决方案,我很乐意听.

在我正在处理的应用程序中,我正在继承ListView控件以添加一些功能,其中一些功能与ListView SelectedIndices和SelectedItems属性进行交互.

问题是,当我尝试对子类进行单元测试时,当我向选择中添加项时,SelectedIndices和SelectedItems属性不会更新.我试过了两个

item.Selected = true

listView.SelectedIndices.Add(...)

但SelectedIndices或SelectedItems似乎并未受到影响.单元测试功能的其他部分工作正常.

如何对ListView子类的选择依赖部分进行单元测试?



1> 小智..:

我发现了一个可以用来填充这些属性的技巧:

listView.AccessibilityObject.ToString(); //解决方法以刷新选定项属性



2> Erik Öjebo..:

问题似乎是如果未绘制ListView,则SelectedIndices和SelectedItems无法正确更新,如ListViewItem.Selected属性的MSDN文档中的注释中所述:

如果从未绘制过ListView,则无法信任Selected属性(例如,它位于TabControl中,尚未选中的选项卡中).在这种情况下,父ListView的SelectedItems和SelectedIndices没有正确更新,仍然是空的.

解决此问题的一个方法是在测试中创建一个简单的虚拟表单类,将ListView添加到表单中,然后只显示表单.之后,SelectedIndices和SelectedItems属性按预期工作.

像这样的东西:

    [Test]
    public void CanGetSelectedItems()
    {
        // simple test to make sure that the SelectedIndices
        // property is updated
        using (var f = new DummyForm(listView))
        {
            f.Show();

            listView.SelectedIndices.Add(0);
            Assert.AreEqual(1, listView.SelectedIndices.Count);
        }
    }

    private class DummyForm : Form
    {
        public DummyForm(ListView listView)
        {
            // Minimize and make it not appear in taskbar to
            // avoid flicker etc when running the tests
            this.WindowState = FormWindowState.Minimized;
            this.ShowInTaskbar = false;
            this.Controls.Add(listView);
        }
    }

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有