Форум программистов, компьютерный форум CyberForum.ru

протестировать методы класса - C++

Восстановить пароль Регистрация
 
tori117
 Аватар для tori117
0 / 0 / 1
Регистрация: 11.03.2012
Сообщений: 3
26.05.2012, 10:52     протестировать методы класса #1
У меня есть класс "вектор". В нём добавила метод, который вычисляет длину вектора и перегрузила функции +,-,=. Нужно протестировать все методы класса. Помогите, пожалуйста, я не совсем понимаю как это сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>;
using namespace std;
    #pragma once
template<typename T>
class vector
{
private:
T *_vector;
size_t _size;
void _realloc(size_t new_size)
{
T *new_vector = new T[new_size];
for(size_t i = 0; i<_size; i++) new_vector[i] = T(_vector[i]);
delete[] _vector;
_vector = new_vector;
_size = new_size;
}
public: 
vector(void)
{
_vector = 0;
_size = 0;
}
 
vector(size_t size)
{
_vector = new T[size];
_size = size;
}
 
~vector()
{
if(_vector) delete[] _vector;
}
 
size_t length()
{
return _size;
}
 
T &operator[](size_t nth)
{
while(nth>=size) _realloc(2*_size);
return _vector[nth];
}
 
vector<T> &operator=(vector<T> &other)
{
_size = 0;
_realloc(other.length());
for(size_t i = 0; i<_size; i++) _vector[i] = other[i];
return this;
}
vector<T> &operator+(vector<T> &other)
{
size_t new_size = _size+other.length();
vector<T> new_vector = new vector<T>(new_size);
for(size_t i = 0; i<_size; i++) new_vector[i] = _vector[i];
for(size_t i = 0; i<other.length(); i++) new_vector[_size+i] = other[i];
return new_vector;
}
 
vector<T> &operator+(T &other)
{
vector<T> new_vector = new vector<T>(_size);
for(size_t i = 0; i<_size; i++) new_vector[i] = _vector[i]+other;
return new_vector;
} 
 
vector<T> &operator-(T &other)
{
vector<T> new_vector = new vector<T>(_size);
for(size_t i = 0; i<_size; i++) new_vector[i] = _vector[i]-other;
return new_vector;
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2012, 10:52     протестировать методы класса
Посмотрите здесь:

Методы класса C++
Виртуальные методы класса C++
Класс шаблон и методы класса C++
не могу использовать методы класса C++
C++ методы класса
C++ Методы и конструкторы класса
C++ Полиморфизм и шаблонные методы класса
C++ Методы класса внутри определения класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.05.2012, 11:45     протестировать методы класса #2
Во первых, ты поместила СВОЙ класс vector в пространство std. За такое тебя исключат прям сразу.
Переименовываю твой класс в Vector.

Тестируем методы:
C++
1
2
3
4
5
6
7
8
int main()
{
    Vector v1, v2, v3;
    // инициализируешь как хочешь
 
    v1 = v2 + v3;
    v1 = v2 - v3;
}
Предупреждаю сразу, что код вектора у тебя не рабочий (ошибки почти всюду), так что не пугайся.
Bers
Заблокирован
26.05.2012, 11:51     протестировать методы класса #3
создаешь отдельный проект. В котором создаешь объект твоего вектора.
И толкаешь все методы этого объекта, по следующей методике:

1. Сначала методы запускаются с заведомо некорректными аргументами.

Цель: определить поведение класса, как он справится с задачей в условиях программных ошибок вызывающей стороны.

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

Отличное состояние: в дебаг версии приложения, класс предупредит разработчика о происшествии и прибьёт процесс. В релиз версии - класс попытается сохранить работоспособность даже в условиях некорретного поведения вызывающей стороны (максимально возможная отказоустойчивость)

Приемлемое состояние: определяется требованиями к проект-заданию класса.

Плохое состояние: класс мух не ловит, и по своей вине допустил неправомерное крушение приложения.

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

2. Далее запускаются пограничные методы класса (минимально возможно допустимые аргументы, и максимально возможно допустимые), а так же аргументы из середины допустимого диапазона.

Цель - убедится в работоспособности штатной работы класса.


Принципы проведения тестов:

1. Тест должен иллюстрировать "use_case" класса, или по другому: "иллюстрация того, как это работает"

То есть, если это класс vector, и мы проверяет работу метода operator=, то тест должен показать читателю: как вектору присвоить что-то.

После запуска метода, тестировочный код должен сверить полученный результат (состояние вектора) с ожидаемым (и гарантированно правильным). Если ожидаемое не соответствует факту - значит метод отработал не так, как должен был. Значит тест провалился, и нужно искать причину ошибки.

Каждый отдельный тест должен быть независимым от других тестов, в "новой", "чистой" среде.
Результаты тестов не должны влиять друг на друга, и как то друг от друга зависеть.

Особое внимание следует уделить краш-тестам. Это тесты на выносливость класса, или тесты "как класс поведёт себя в критической ситуации". Если класс в критической ситуации обязан обрушить приложение - нужно убедиться, что он действительно это сделает.


В качестве фрейморка для быстрого и удобного создания серий тестов рекомендую google test.
Их вреймворк прост, удобен, и предоставляет достаточно мощный инструментарий для тестирования всего и вся.
Yandex
Объявления
26.05.2012, 11:51     протестировать методы класса
Ответ Создать тему
Опции темы

Текущее время: 16:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru