我對TDD比較陌生,仍然試圖學習應用一些概念。這是我的情況。TDD與DataGridView
我有一個帶有DataGridView的WinForm。我正在嘗試編寫一個測試程序,通過點擊按鈕調用該程序,該程序將對網格的選定行執行一些操作。 所以我將傳入DataGridViewSelectedRowCollection對象(即單擊按鈕時的dgv.SelectedRows屬性)。
DataGridViewSelectedRowCollection對象沒有構造函數,所以我可以創建它的唯一方法是將DataGridView放在我的測試項目中,然後選擇一些行並傳入SelectedRows屬性。但顯然,我不想在那裏重新創建整個表單。
因此,我做了一個DataGridView dgv = new DataGridView(),並且綁定了一個BindingList(實際上是一個SortableBindingList),就像網格在實際應用中綁定一樣。測試列表中有3行。我做了一個dgv.DataSource = myList。
現在,在真正的應用程序中,網格視圖被綁定。如果我查看dgv.Rows.Count,它等於列表中的行數。但是,在我的測試中,將DataSource屬性設置爲列表仍然會導致網格中出現零行。
我想在gridview的創建中缺少一些東西,當它被添加到窗體的控件列表時,它通常會完成。它可能會初始化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");
感謝任何幫助,您可以給我。
你想分配數據源 - 填充它(或使用BindingSource).. – stuartd 2009-09-14 22:49:03
謝謝,斯圖爾特,但我填充它後也嘗試過它,以及相同的結果。(事實上,那是我第一次嘗試,然後我看了一些先綁定數據源然後填充數據源的例子,所以我嘗試了這種方式,這就是我最終發佈的代碼。使用BindingSources。) 我看到很多使用BindingSources的發佈示例。我試圖避免它有兩個原因:1)我不明白他們。它似乎只是增加了對混音的另一層次的間接/混淆。 2)我測試的代碼不使用綁定源。 – 2009-09-15 13:20:25