И так, с чего начать? В общем я хочу реализовать класс окна для отображения графика. Но не просто реализовать, а провести тестирование каждого блока или метода в этом классе. И вот уже на первых шагах возникли проблемы
Пока задача - нарисовать ось X с делениями. Ширина делений фиксированна, жестко прошыта в классе. Задается местонахождение точки начала координат в клиентской области окна и длина оси. Задаются также начальное, конечное значение по оси и шаг делений. Разбил все это на мелкие задачи.
1. Рисование линии. Исользую шаблонную функцию:
template <class DCT> inline void drawLine(DCT& dc, CPoint from, CPoint to)
{
dc.MoveTo(from);
dc.LineTo(to);
}
В тестовом коде подставляется MockDC, в приложении - наследник DC.
Проблем нет.
Начиная со второго пункта хотел все поместить в класс XAxe, но неудобно тестировать.
2. Рисование оси.
3. Рисование одного деления.
4. Рисование всех делений.
Начиная со второго пункта - проблемы.
Вот здесь напрашивается такой тест:
MockDC dc;
MockDrawLine drawer;
XAxe axe;
...//инициализация
axe.drawAxe(dc);
...// проверка
И в этом коде никак не пойму куда же нужно приткнуть drawer.
Если так для теста
XAxe<MockDrawLine> axe(&drawer);
, то для приложения ...?
Если
axe.drawAxe(dc, &drawer);
, то вопрос, каким образом я задам рисовалищика линий переносится на позже, но все равно в конце концов вылазит, а именно как записать вызов полного рисования оси?
axe.draw(dc, &lineDrawer, &scalePointDrawer)
?
Аналогично для третьего и четвертого пункта. Напрашивается введение ScalePointDrawer и ScalePointsDrawer. Тестирование в таком случае чрезвычайно упрощается, но как потом все это объединить?