Как правильно для тестируемости добавить функциональность в ComboBox? - PullRequest
2 голосов
/ 28 января 2009

Требуемая функциональность «расширенного» поля со списком - это метод быстрого поиска. Каждый элемент в выпадающем списке имеет метод ToString (), так что они могут отображаться в раскрывающемся списке. При нажатии на элемент в раскрывающемся списке наблюдатели в выпадающем списке уведомляются о выборе.

Кроме того, каждый раз, когда набранный текст в комбинированном ящике изменяется, генерируется список «Кандидатов», состоящий из всех тех элементов в раскрывающемся списке, которые содержат текст, набранный до сих пор. Нажатие клавиши ввода приводит вас к первому кандидату в этом списке, а повторное нажатие клавиши ввода циклически перемещает вас по списку.

Я реализовал эту функциональность, выведя из ComboBox - я подумал, что это имеет смысл, так как я все еще функционально оставлен с комбинированным списком, он просто добавил эту функцию "QuickFind". Однако логика создания списка кандидатов и его циклического перемещения, хотя и проста, не совсем тривиальна и требует некоторого тестирования.

Однако, как видно здесь не так-то просто проверить ComboBox, просто создав его и добавив дополнительные подпрограммы, которые я добавил - он должен существовать в форме для вести себя так же, как в приложении. Это кажется слишком большим усилием, чтобы протестировать простое дополнение к простому комбинированному окну!

Однако в коде для циклического прохождения кандидатов нет ничего конкретного для моего приложения - я создал общий элемент управления, который можно использовать в любом количестве контекстов, единственное требование заключается в том, чтобы объекты в выпадающем списке имели ToString () methiod - это то же ограничение, которое накладывается на объекты, входящие в обычные выпадающие списки, и гарантируется C # .NET.

Итак, с точки зрения тестируемости, куда бы вы поместили расширенную функциональность?

1 Ответ

1 голос
/ 28 января 2009

Как и в посте, на который вы ссылаетесь: отделение логики от элементов графического интерфейса также является решением здесь.

Вам следует рассмотреть возможность использования класса, подобного контроллеру, который предоставляет список элементов, которые можно привязать к базе данных вашего ComboBox 'DataSource. Сам контроллер отвечает за ведение этого списка.

Поэтому, когда вы вводите букву в ComboBox, вы вызываете функцию на контроллере, скажем, UpdateList (строка typedString). Таким образом, вы разделили логику заполнения списка «кандидатами».

Теперь вы можете легко написать ряд тестов, каждый из которых вызывает UpdateList () с разными аргументами и впоследствии проверяет список элементов. Для тестирования не требуется никаких графических элементов, вы тестируете только сам алгоритм.

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