Почему SelectedIndices и SelectedItems не работают, когда ListView создается в модульном тесте? - PullRequest
5 голосов
/ 20 ноября 2008

Я пишу этот вопрос в духе ответа на ваши вопросы, так как я нашел решение проблемы, но если у кого-то есть лучшее решение, я бы с удовольствием выслушал его.

В приложении, над которым я сейчас работаю, я создаю подкласс элемента управления ListView, чтобы добавить некоторые функции, некоторые из которых взаимодействуют со свойствами ListView SelectedIndices и SelectedItems.

Проблема в том, что при попытке модульного тестирования моего подкласса свойства SelectedIndices и SelectedItems не обновляются при добавлении элементов в выборку. Я пробовал оба

item.Selected = true

и

listView.SelectedIndices.Add(...)

Но SelectedIndices или SelectedItems просто не оказываются затронутыми. Модульные тесты для других компонентов функционируют нормально.

Как выполнить модульное тестирование зависимых от выбора частей моего подкласса ListView?

Ответы [ 4 ]

8 голосов
/ 06 февраля 2009

Я нашел трюк, который можно использовать для заполнения этих свойств:

listView.AccessibilityObject.ToString (); // Временное решение для обновления свойств выбранных элементов

7 голосов
/ 20 ноября 2008

Кажется, проблема в том, что SelectedIndices и SelectedItems не обновляются должным образом, если ListView не был нарисован, как указано в этом комментарии из документации MSDN ListViewItem.Selected свойство :

Свойству Selected нельзя доверять, если ваш ListView никогда не рисовался (например, он находится в TabControl, на вкладке, которая еще не была выбрана). В этом случае SelectedItems и SelectedIndices родительского ListView обновляются неправильно и по-прежнему будут пустыми.

Одним из решений этой проблемы является создание в вашем тесте простого фиктивного класса формы, добавление 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);
        }
    }
2 голосов
/ 07 марта 2013

Я обнаружил, что вызов .CreateControl () для объекта ListView обновил свойства SelectedItems.

0 голосов
/ 27 июля 2015

"Я обнаружил, что вызов .CreateControl () для объекта ListView обновил свойства SelectedItems."

Верно, но только если вы используете Multi-select.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...