Желаемая функциональность «расширенного» поля со списком — это метод быстрого поиска. Каждый элемент в поле со списком имеет метод ToString(), чтобы их можно было отобразить в раскрывающемся списке. При щелчке элемента в раскрывающемся списке наблюдатели поля со списком уведомляются о выборе.
Кроме того, каждый раз, когда набранный текст в поле со списком изменяется, создается список «Кандидаты», состоящий из всех тех элементов в раскрывающемся списке, которые содержат набранный до сих пор текст. Нажатие Enter приведет вас к первому кандидату в этом списке, повторное нажатие Enter прокручивает вас по списку.
Я реализовал эту функциональность, производную от ComboBox - я решил, что это имеет смысл, поскольку функционально я все еще оставляю поле со списком, просто добавлена эта функция «QuickFind». Тем не менее, логика создания списка кандидатов и его циклического просмотра, хотя и проста, не совсем тривиальна, и ее можно было бы протестировать.
Однако, как видно здесь, не так-то просто протестируйте ComboBox, просто сконструировав его и используя дополнительные процедуры, которые я добавил — он должен существовать в форме, чтобы вести себя так же, как в приложении. Это кажется слишком большим усилием, чтобы протестировать простое дополнение к простому комбинированному полю!
Однако ничто в коде для циклического перебора кандидатов не относится к моему приложению - я создал общий элемент управления, который можно использовать в любом количестве контекстов, единственное требование состоит в том, чтобы объекты в поле со списком имели метод ToString(), который это то же самое ограничение, которое в любом случае накладывается на объекты, попадающие в обычные поля со списком, и гарантируется C# .NET.
Итак, имея в виду возможность тестирования, куда бы вы поместили расширенную функциональность?