Стек реализуется через связанный список . Каковы тестовые примеры , когда это работает, а когда нет?
2 ответа
Соответствующие модульные тесты зависят от вашего конкретного интерфейса (тестирование черного ящика), а также от вашей конкретной реализации (тестирование стеклянного ящика). Что касается стека, то я ожидал бы протестировать некоторые вещи:
- Можно положить элемент в стек и вытащить его.
- При добавлении нескольких отдельных элементов в стек повторное выталкивание возвращает их в обратном порядке.
- Неинициализированный стек пуст.
- Стек, в который помещен элемент, не пуст.
- Стопка, в которую помещены и впоследствии удаляются элементы, пуста.
- Попытка вытолкнуть, когда нет элементов, приводит к задокументированному типу сбоя, будь то возврат NULL, выдача исключения или прерывание программы.
Обобщить:
- Базовый функционал.
- Заказать недвижимость.
- Инвариант пустоты.
- Режим отказа.
Обратите внимание, что то, что нужно протестировать, будет отличаться для других структур данных. Как правило, способ создания этого набора тестов состоит в создании модульного теста для каждой функции, который подтверждает, что все гарантии, сделанные в документации, поддерживаются и что они поддерживаются для всех путей кода через функцию. Кроме того, следует протестировать задокументированные режимы отказа, чтобы подтвердить, что они выходят из строя ожидаемым образом.
Что ж, подумайте, что вы хотите, чтобы ваш стек делал. Создайте API (или посмотрите на API существующий стек) и проверьте, каждая ли функция выполняет то, что должна. Вам следует взглянуть на Модульное тестирование.
Пример: в вашем базовом стеке должны быть push()
и pop()
, поэтому:
- создать элемент A,
- поместите A в стек,
- вытолкнуть элемент
- посмотрим, является ли это элементом А.
Особенно проверьте крайние случаи: удаление последнего элемента, двойная вставка элемента, вставка недопустимых объектов, ссылки на сам стек, удаление объектов, находящихся в стеке.
Похожие вопросы
Новые вопросы
stack
Стек — это абстрактный тип данных и структура данных по принципу «последним пришел — первым вышел» (LIFO). Для вопросов о стеке вызовов сборки используйте вместо этого [память стека], [указатель стека] и/или [фрейм стека]. Для вопросов об инструменте сборки Haskell используйте вместо этого [haskell-stack]. Для вопросов о C++ std::stack используйте вместо этого [stdstack].
homework
.