Читаем Программирование полностью

  Color fcolor;         // цвет заполнения

  Shape(const Shape&);  // предотвращает копирование

  Shape& operator=(const Shape&);

};

Как приступить к тестированию этого класса? Сначала рассмотрим, чем класс Shape отличается от функции binary_search с точки зрения тестирования.

• Класс Shape имеет несколько функций.

• Состояние объекта класса Shape может изменяться (мы можем добавлять точки, изменять цвет и т.д.), т.е. одна функция может влиять на другую.

• Класс Shape имеет виртуальные функции. Другими словами, поведение объекта класса Shape зависит от того, какой производный класс был создан на его основе (если такой класс существует).

• Класс Shape не является алгоритмом.

• Изменение объекта класса Shape может влиять на содержимое экрана.

  Последний момент особенно неприятный. По существу, это значит, что мы должны посадить перед компьютером человека, который будет смотреть, правильно ли ведет себя объект класса Shape. Это не соответствует принципам систематичного, воспроизводимого и доступного тестирования. Как указывалось в разделе 26.3.4.1, мы часто прибегаем к разным уловкам, чтобы избежать этого. Однако пока будем предполагать, что существует наблюдатель, который замечает отклонения изображения от требуемого образца.

  Отметим важную деталь: пользователь может добавлять точки, но не может их удалять. Пользователь или функции класса Shape могут считывать точки, но не могут их изменять. С точки зрения тестирования все, что не вносит изменений (или, по крайней мере, не должно вносить), облегчает работу.

Что мы можем тестировать, а что не можем? Для того чтобы тестировать класс Shape, мы должны попытаться протестировать его как отдельно, так и в сочетании с производными классами. Однако, для того чтобы проверить, что класс Shape работает правильно с конкретным производным классом, мы должны протестировать этот производный класс.

Ранее мы уже отметили, что объект класса Shape имеет состояние (значение), определенное четырьмя данными-членами.

vector points;

Color lcolor; // цвет линий и символов

Line_style ls;

Color fcolor; // цвет заполнения

Все, что мы можем сделать с объектом класса Shape, — внести в него изменения и посмотреть, что произойдет. К счастью, изменить данные-члены можно только с помощью интерфейса, определенного функциями-членами.

Простейшим объектом класса Shape является объект класса Line, поэтому начнем с создания одного такого объекта и внесем все возможные изменения (используя самый наивный стиль тестирования).

Line 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";

if (ln.point(1)!=Point(100,100)) cerr << "Неправильная точка 2";

for (int i=0; i<10; ++i) { // смотрим на перемещения объекта

  ln.move(i+5,i+5);

  ln.draw();

}

for (int i=0; i<10; ++i) { // проверяем, возвращается ли объект

                           // в исходное положение

  ln.move(i–5,i–5);

  ln.draw();

}

if (point(0)!=Point(10,10))

  cerr << "Неправильная точка 1 после перемещения";

if (point(1)!=Point(100,100))

  cerr << "Неправильная точка 2 после перемещения";

for (int i = 0; i<100; ++i) { // смотрим, правильно ли изменяются

                              // цвета

  ln.set_color(Color(i*100));

  if (ln.color() != Color(i*100))

    cerr << "Неправильное значение set_color";

  ln.draw();

}

for (int i = 0; i<100; ++i) { // смотрим, правильно ли изменяется

                              // стиль

  ln.set_style(Line_style(i*5));

  if (ln.style() != Line_style(i*5))

  cerr << "Неправильное значение set_style";

  ln.draw();

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных