unit tests
  • Установка Google Test
    • через VS 2022
  • Что тестировать как тестировать
    • Test Suites
  • Google Test примеры
  • Параметризация примеры
  • Функции expect и assert
    • EXPECT_*
  • Пример setUP() TearDown()
  • Тестирование производительности
  • Профилирование
    • ЦП Аналитика
    • Пример
  • пример тестирование записи в файл
  • 📚Tasks
    • Задание на повторение
    • Задание calculate_average
    • Задание
    • Задание 2
    • Задание 3
    • Задание Интеграционное тестирование
    • Задание 4 треугольник интеграция
    • Задание кошелек
    • Кошелек интеграция
    • Задачи профилирование
    • Задание Task
  • Пример
Powered by GitBook
On this page
  1. Tasks

Задание 3

Задача: Тестирование функции определения средней длины слов в строке

Описание:

Вам предоставлена функция calculateAverageWordLength, которая принимает строку в качестве входных данных и возвращает среднюю длину слов в этой строке. Ваша задача - написать тесты для этой функции, используя Google Test, чтобы убедиться в её корректности и надёжности.

Требования:

  1. напишите тест-кейсы для функции calculateAverageWordLength

  2. Напишите тесты для функции calculateAverageWordLength, которые проверяют корректность вычисления средней длины слов для различных строк.

  3. Убедитесь, что тесты охватывают различные виды строк, включая строки с разными типами слов (короткие, длинные, состоящие из цифр и символов).

  4. Проверьте, что функция корректно обрабатывает граничные случаи, такие как пустая строка или строка без слов.

  5. Добавьте тесты для ситуаций, когда в строке присутствуют символы пунктуации и разделители.

  6. Используйте механизмы Google Test, такие как EXPECT_DOUBLE_EQ, EXPECT_NE, и EXPECT_THROW, для проверки ожидаемых результатов и исключений.

#include <iostream>
#include <string>
#include <cctype>

// Функция вычисления средней длины слова в строке
double calculateAverageWordLength(const std::string& input) {
    // Проверка на пустую строку
    if (input.empty()) {
        throw std::invalid_argument("Input string is empty");
    }

    size_t wordCount = 0;        // Количество слов в строке
    size_t totalWordLength = 0;  // Общая длина всех слов в строке
    bool inWord = false;         // Флаг, указывающий, находимся ли мы внутри слова

    // Проход по каждому символу в строке
    for (char c : input) {
        // Проверка, является ли символ буквой или цифрой
        if (std::isalnum(c)) {
            // Если началось новое слово
            if (!inWord) {
                inWord = true;  // Устанавливаем флаг, что мы внутри слова
                wordCount++;    // Увеличиваем счетчик слов
            }
            totalWordLength++;  // Увеличиваем общую длину слова
        } else {
            inWord = false;  // Если символ не является буквой или цифрой, считаем, что слово закончилось
        }
    }

    // Если в строке не найдено слов, бросаем исключение
    if (wordCount == 0) {
        throw std::invalid_argument("No words found in the input string");
    }

    // Возвращаем среднюю длину слова
    return static_cast<double>(totalWordLength) / wordCount;
}

int main() {
    try {
        std::string input1 = "Hello World";
        std::string input2 = "The quick brown fox jumps over 2 lazy dogs.";

        // Вычисляем среднюю длину слова для двух строк
        double averageLength1 = calculateAverageWordLength(input1);
        double averageLength2 = calculateAverageWordLength(input2);

        // Выводим результаты
        std::cout << "Average word length in \"" << input1 << "\": " << averageLength1 << std::endl;
        std::cout << "Average word length in \"" << input2 << "\": " << averageLength2 << std::endl;
    } catch (const std::exception& e) {
        // В случае ошибки выводим сообщение об ошибке
        std::cerr << "Error: " << e.what() << std::endl;
    }

    return 0;
}
PreviousЗадание 2NextЗадание Интеграционное тестирование

Last updated 1 year ago

📚