Я создал элемент управления, полученный из ComboBox, и хочу протестировать его поведение.
Однако в моем модульном тесте он ведет себя не так, как в реальном приложении.
В реальном приложении свойство Combobox.DataSource и .Items синхронизируются - другими словами, когда я изменяю Combobox.DataSource, список .Items немедленно и автоматически обновляется, показывая элемент для каждого элемента DataSource.
В моем тесте я создаю ComboBox, назначаю ему источник данных, но список .Items вообще не обновляется, оставаясь в 0 элементах. Таким образом, когда я пытаюсь обновить .SelectedIndex до 0 в тесте, чтобы выбрать первый элемент, я получаю ArgumentOutOfRangeException.
Это потому, что в моем модульном тесте нет запуска Application.Run, запускающего цикл обработки событий, или это немного красной сельди?
РЕДАКТИРОВАТЬ: Подробнее о первом тесте:
[SetUp]
public void SetUp()
{
mECB = new EnhancedComboBox();
mECB.FormattingEnabled = true;
mECB.Location = new System.Drawing.Point( 45, 4 );
mECB.Name = "cboFind";
mECB.Size = new System.Drawing.Size( 121, 21 );
mECB.TabIndex = 3;
mECB.AddObserver( this );
mTestItems = new List<TestItem>();
mTestItems.Add( new TestItem() { Value = "Billy" } );
mTestItems.Add( new TestItem() { Value = "Bob" } );
mTestItems.Add( new TestItem() { Value = "Blues" } );
mECB.DataSource = mTestItems;
mECB.Reset();
mObservedValue = null;
}
[Test]
public void Test01_UpdateObserver()
{
mECB.SelectedIndex = 0;
Assert.AreEqual( "Billy", mObservedValue.Value );
}
Тест не выполняется в первой строке при попытке установить SelectedIndex на 0. При отладке это происходит потому, что при изменении .DataSource коллекция .Items не обновляется, чтобы отразить это. Однако при отладке реального приложения коллекция .Items всегда обновляется при изменении .DataSource.
Конечно, мне не нужно визуализировать ComboBox в тесте, у меня даже не настроено рисование поверхностей для рендеринга! Может быть, единственный ответ, который мне нужен, - «Как сделать обновление ComboBox таким же образом, как при рисовании, в сценарии модульного тестирования, где мне фактически не нужно рисовать прямоугольник?»