вторник, 4 июля 2017 г.

Как тестировать расширение поведения контрола?

Например использую я в своем приложении Grid. Лежит он у меня на в одном из окошек. На нем вообще много разных контролов, я закладки сделал и грид у меня на второй закладке. Источник данных для грида у меня умненький: данные загружает только при реальном обращении. Я его сразу в грид присваиваю, код простой получается, а сам грид не пытается сразу же данные зачитывать. И это правильно, ведь закладка-то у него вторая, еще не открытая, и я ожидаю что он не будет загружать данные и увеличивать время для открытия окна. Зато на открытии закладки он сам данные зачитывает, ведь теперь он видимый стал. Очень такой хороший грид. В этом сценарии.

А в соседнем сценарии грид уже не так хорош: если вторую закладку открыть, потом первую закладку, обновить все данные в окне (и сразу же присвоить ему источник данных), то он сразу же зачитает эти данные. Хотя находится на неактивной закладке и его сейчас не видно. Как же быть?

Авторы грида советуют обработать несколько событий грида и TabControl'а (VisibleChanged, ParentChanged, HandleCreated, ....) и в этой ситуации присваивать источник данных "когда надо": только когда закладка с гридом станет активной.

Подход выглядит нормальным. Только обработчики у меня получаются на таких событиях, которые и в других сценариях происходят, а полного списка этих сценариев у меня нет и я не могу проверить работу грида с этими обработчиками во всех этих сценариях. Это у авторов контрола есть такой большой список и они на нем свой контрол проверяют. А у меня его нет.

Получается у меня в приложении неизвестное поведение контрола, подпертого моими костыликами на посоветованных евентах: может быть он как раньше работает, а может уже и не работает.

В этой ситуации могут помочь публичные репозитории исходников грида вместе с тестами: я смогу проверить грид с моими костыликами на всех тех же самых тестах + мой новый сценарий.