Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Результат_2012_02_09.docx
Скачиваний:
6
Добавлен:
20.04.2015
Размер:
593.36 Кб
Скачать

Задача 2. Составить тесты к программе

Рассуждения:

  1. В современном мире использование Unit тестирования во время работаботки программного обеспечения является почти повсеместным. Поэтому в этой задаче мы рассмотрим составление тестов к программе на примере программы сложения двух чисел.

  2. Известно, что к Visual Studio существует множество различных плагинов, которые могут быть платными или бесплатными, и добавляют различные функциональности к возможностям Visual Studio. Один из таких плагинов – Visual Assert (http://www.visualassert.com). Данный плагин очень просто установить в Visual Studio и работать с ним довольно легко. Поэтому мы остановимся на нем.

  3. Составим программу (файл назовем main.cpp), которая содержит класс для сложения двух чисел.

#include <iostream>

using namespace std;

class ClassForTest {

public:

int getSum(int a, int b) {

return a + b;

}

};

int main(int argc, char * argv[]) {

ClassForTest testClass = ClassForTest();

cout << testClass.getSum(1,2);

return 0;

}

  1. Следует отметить, что на самом деле функция getSum должна быть статической. Но это сейчас нас не интересует, потому что наша задача – составить тесты. Если программу запустить, то в консоли появится число 3 и она сразу закроектся.

  2. По хорошему тону программирования тесты необходимо создавать в отдельном файле. Однако это потребует вынеса ClassForTest в отдельный h файл (header file в папке проекта Header Files) и реализации в отдельный cpp файл (C++ File в папке проекта Source Files). Сделаем это. После этого в Solution Explorer будет следующая структура:

А содержимое файлов будет следующим:

ClassForTest.h

#pragma once

class ClassForTest {

public:

int getSum(int a, int b);

};

ClassForTest.cpp

#include "ClassForTest.h"

int ClassForTest::getSum(int a, int b) {

return a + b;

}

main.cpp

#include <iostream>

#include "ClassForTest.h"

using namespace std;

int main(int argc, char * argv[]) {

ClassForTest testClass = ClassForTest();

cout << testClass.getSum(1,2);

return 0;

}

  1. Теперь составим тесты. Для этого создадим С++ файл с названием tests.cpp. Его содержимое представлено ниже:

#include "ClassForTest.h"

#include <cfixcc.h>

class ExampleTest : public cfixcc::TestFixture {

public:

void test1() {

ClassForTest z;

int c = z.getSum(1, 2);

CFIXCC_ASSERT_EQUALS(c, 3);

}

void test2() {

ClassForTest z;

int c = z.getSum(2, 2);

CFIXCC_ASSERT_EQUALS(c, 4);

}

};

CFIXCC_BEGIN_CLASS(ExampleTest)

CFIXCC_METHOD(test1)

CFIXCC_METHOD(test2)

CFIXCC_END_CLASS()

  1. Отметим некоторые важные моменты в этом коде:

    1. #include <cfixcc.h> - это подключает класс, от которого необходимо наследоваться для создания тестов

    2. public cfixcc::TestFixture - это наследование от базового класса для тестов

    3. CFIXCC_BEGIN_CLASS(ExampleTest)… CFIXCC_END_CLASS() – внутри этого указываются, какие методы необходимо запускать во время тестирования.

  2. Теперь перейдем в главном меню в «Visual Assert», подпункт «Test Explorer Window». В появившемся окне выберем кнопку «Run Tests without debugging»

  1. После этого мы можем просмотреть результаты тестирования (после разворачивания всех «плюсиков» панель Test Run представлена на рисунке:

  1. Как видно из него, оба теста прошли успешно. Если у нас будет неверный тест или ошибка в кодах, то соответствующий тест не пройдет, и картина будет следующей (по ней очень легко понять, что test2 не прошел):

  1. Однако теперь при запуске приложения (F5) мы будем видеть следующее сообщение (и программа не будет запускаться):

  1. Эту проблему легко исправить. Логично предположить, что тесты являются дополнительным кодом, который облегчает поддержку кода. Поэтому во время использования программы в Debug и в Release версии он не нужен. Поэтому мы создадим специальную Test конфигурацию, в которую вынесем тесты.

  2. Перейдем в Configuration Manager, как показано на рисунке

  1. После этого появится следующее окно:

  1. Создадим новую конфигурацию для Solution

  1. После выбора «New» появится окно, в котором надо ввести название новой конфигурации и от какой конфигурации брать настройки. Вид окна после заполнения представлен на рисунке.

  1. После запонения нажмем кнопку «OK» и закроем Configuration Manager. После этого проект будет находится в Test конфигурации.

  2. Теперь зайдем в свойства проекта

  1. Теперь перейдем в Configuration Properties, в С/С++,

  2. В Preprocessor Defenitions выберем пункт Edit и появится следующее окно:

  1. Туда добавим новую символьную константу – TEST, как показано на рисунке

  1. Теперь нажмем кнопку «OK» и вернемся к файлу tests.cpp. В начале файла добавим строку «#ifdef TEST», а в конце – «#endif». Тогда файл будет выглядить следующим образом (середина файла не представлена для уменьшения объема):

#ifdef TEST

#include "ClassForTest.h"

#include <cfixcc.h>

//старое содержимое

CFIXCC_BEGIN_CLASS(ExampleTest)

CFIXCC_METHOD(test1)

CFIXCC_METHOD(test2)

CFIXCC_END_CLASS()

#endif

  1. Теперь для запуска тестов необходимо перейти в Test конфигурацию и работать с тестами. А для запуска приложения – перейти в Debug или Release конфигурацию и работать с приложением.