Программирование. Принципы и практика использования C++ Исправленное издание, стр. 378

26.3.5. Тестирование классов
С формальной точки зрения тестирование классов представляет собой тестирование модулей, но с учетом того, что у каждого класса обычно есть несколько функций-членов и некоторое состояние, тестирование классов имеет признаки тестирования систем. Особенно это относится к базовым классам, которые необходимо рассматривать в разных контекстах (определенных разными производными классами). Рассмотрим класс
Shapeclass 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<Point> points; // не используется всеми // фигурами Color lcolor; // цвет для линий и символов Line_style ls; Color fcolor; // цвет заполнения Shape(const Shape&); // предотвращает копирование Shape& operator=(const Shape&);};Как приступить к тестированию этого класса? Сначала рассмотрим, чем класс
Shapebinary_search• Класс
Shape• Состояние объекта класса
Shape• Класс
ShapeShape• Класс
Shape• Изменение объекта класса
Shape
Shape
ShapeЧто мы можем тестировать, а что не можем? Для того чтобы тестировать класс
ShapeShapeРанее мы уже отметили, что объект класса
Shapevector<Point> points;Color lcolor; // цвет линий и символовLine_style ls;Color fcolor; // цвет заполненияВсе, что мы можем сделать с объектом класса
ShapeПростейшим объектом класса
ShapeLineLine ln(Point(10,10), Point(100, 100));ln.draw(); // смотрим, что произошло// проверка точек:if (ln.number_of_points() != 2) cerr << "Неправильное количество точек ";if (ln.point(0)!=Point(10,10)) cerr << "Неправильная точка 1";