Решился на днях попробовать задействовать юнит тесты в приложении на винформах с тестированием логики представления данных. Всегда подозревал что затея это сомнительная, но всё-таки переборол внутренний протест и заставил сделать это
. Задействовал для ентого дела ныне модный супер паттерн MVP
. Сухой остаток на текущий момент — вместо одного класса формы с обработчиками в стиле
void SomeEventHandler(object sender, EventArgs e)
{
int val = _serverApi.GetCurrentSignalLevel();
_txtSignalValue.Text = val.ToString();
}
Получаем
class MyForm : IView
{
void SomeEventHandler(object sender, EventArgs e)
{
FireSignalRefresh();
}
void SetSignalValue(int val)
{
_txtSignalValue.Text = val.ToString();
}
}
class MyPresenter
{
void SignalRefresh() {
_view.SetSignalValue(_serverApi.GetCurrentSignalLevel());
}
}
По моему достаточный геморрой и много лишнего кода, делающего общую логику туманной и менее прозрачной. Если теперь предположить, что таких обработчиков и методов в интерфейсе IView будет дофига, то количество лишней работы становится колосальным. Для тестировавания делаем мок на IView и дёргаем методы презентера. однако при сложной отображалке этот процесс становится довольно проблематичным... Если у кого есть хорошие ссылки по ентому процессу накидайте пожалуйста. А то кроме довольно малоинформативных статеек с codeproject под руку не попадается ничего. Везде приводят простенький пример, хотя даже на простом примере видно какой это геморрой и сколько лишнего времени уходит на написание презентеров, реализаций интерфейсов IView, пересылки сообщений в презентер...