26.3.5. Тестирование классов
С формальной точки зрения тестирование классов представляет собой тестирование модулей, но с учетом того, что у каждого класса обычно есть несколько функций-членов и некоторое состояние, тестирование классов имеет признаки тестирования систем. Особенно это относится к базовым классам, которые необходимо рассматривать в разных контекстах (определенных разными производными классами). Рассмотрим класс Shape
из раздела 14.2.
class Shape { // задает цвет и стиль, хранит последовательность линий
public:
void draw const; // задает цвет и рисует линии
virtual void move(int dx, int dy); // перемещает фигуру
// на +=dx и +=dy
void set_color(Color col);
Color color const;
void set_style(Line_style sty);
Line_style style const;
void set_fill_color(Color col);
Color fill_color const;
Point point(int i) const; // доступ к точкам без права
// модификации
int number_of_points const;
virtual ~Shape { }
protected:
Shape;
virtual void draw_lines const; // рисует соответствующие точки
void add(Point p); // добавляет точку p
void set_point(int i,Point p); // points[i]=p;
private:
vector
// фигурами
Color lcolor; // цвет для линий и символов
Line_style ls;
Color fcolor; // цвет заполнения
Shape(const Shape&); // предотвращает копирование
Shape& operator=(const Shape&);
};
Как приступить к тестированию этого класса? Сначала рассмотрим, чем класс Shape
отличается от функции binary_search
с точки зрения тестирования.
• Класс Shape
имеет несколько функций.
• Состояние объекта класса Shape
может изменяться (мы можем добавлять точки, изменять цвет и т.д.), т.е. одна функция может влиять на другую.
• Класс Shape
имеет виртуальные функции. Другими словами, поведение объекта класса Shape
зависит от того, какой производный класс был создан на его основе (если такой класс существует).
• Класс Shape
не является алгоритмом.
• Изменение объекта класса Shape
может влиять на содержимое экрана.