Я относительно новичок в TDD и все еще пытаюсь научиться применять некоторые концепции. Вот моя ситуация.
У меня есть WinForm с DataGridView. Я пытаюсь написать тест для подпрограммы, вызываемой нажатием кнопки, которая будет выполнять некоторые операции с выбранными строками сетки.
Поэтому я буду передавать объект DataGridViewSelectedRowCollection (т.е. свойство dgv.SelectedRows в момент нажатия кнопки).
Объект DataGridViewSelectedRowCollection не имеет конструктора, поэтому я могу понять, как его создать, - собрать DataGridView в моем тестовом проекте, затем выбрать несколько строк и передать свойство SelectedRows. Но ясно, что я не хочу воссоздавать целую форму там.
Итак, я делаю DataGridView dgv = new DataGridView () и генерирую BindingList (на самом деле это SortableBindingList) точно так же, как сетка привязана в реальном приложении. Список тестов состоит из 3 строк. И я делаю dgv.DataSource = myList.
Теперь, в этой точке реального приложения, вид сетки привязан. Если я смотрю на dgv.Rows.Count, он равен количеству строк в списке. Однако в моем тесте установка свойства DataSource в список по-прежнему приводит к нулю строк в сетке.
Я думаю, что в создании вида сетки чего-то не хватает, что обычно делается при добавлении его в контрольный список формы. Вероятно, он инициализирует обработчик для события OnDataSourceChanged или чего-то еще, и это не делается в моем тестовом коде, но я действительно в растерянности относительно того, как это исправить, опять же, без повторного создания целого объекта формы в мой тестовый прибор.
Вот соответствующий код формы моего метода тестирования:
DataGridView residueGrid = new DataGridView();
List<Employee> baseListToGrid = new List<Employee>();
SortableBindingList<Employee> listToGrid = new SortableBindingList<Employee>(baseListToGrid);
residueGrid.DataSource = listToGrid;
for (int ix = 1; ix < 4; ix++)
{
listToGrid.Add(ObjectMother.GetEmployee(ix));
}
Assert.AreEqual(3, listToGrid.Count, "SortableBindingList does not have correct count");
Assert.AreEqual(3, residueGrid.Rows.Count, "DataGrid is not bound to list");
Спасибо за любую помощь, которую вы можете оказать мне.