Ниже приведён пример решения на языке Python с подробными комментариями. В данном решении мы реализуем два класса и для них создаём модульные тесты с использованием стандартного модуля unittest:
- Вариант 3 – класс для расчёта факториала.
- ...
class Factorial:
def calculate(self, n):
Метод расчёта факториала числа n.
Если n отрицательно, выбрасывается исключение ValueError.
if n 0:
raise ValueError(Факториал не определён для отрицательных чисел)
Инициализируем результат единицей (так определён факториал 0! = 1)
result = 1
for i in range(1, n + 1):
result *= i # на каждом шаге умножаем result на i
return result
————————————————————————————
Шаг 2. Реализация класса для операций сложения и произведения
Создадим класс Calculator с двумя методами:
– add(a, b): возвращает сумму двух целых чисел.
– multiply(a, b): возвращает произведение двух целых чисел.
Код класса:
class Calculator:
def add(self, a, b):
Вычисляет сумму двух чисел a и b.
return a + b
def multiply(self, a, b):
Вычисляет произведение двух чисел a и b.
return a * b
————————————————————————————
Шаг 3. Написание модульных тестов с использованием unittest
Создадим тестовые классы для Factorial и Calculator. Мы проверим корректность вычисления для известных значений, а также обработку ошибок (например, факториал для отрицательного числа).
Код модульных тестов:
import unittest
class TestFactorial(unittest.TestCase):
def setUp(self):
Инициализируем экземпляр класса Factorial для каждого теста
self.factorial = Factorial()
def testzero(self):
0! должно быть равно 1
self.assertEqual(self.factorial.calculate(0), 1)
def testone(self):
1! должно быть равно 1
self.assertEqual(self.factorial.calculate(1), 1)
def testpositive(self):
Проверяем несколько положительных чисел
self.assertEqual(self.factorial.calculate(3), 6) # 3! = 6
self.assertEqual(self.factorial.calculate(5), 120) # 5! = 120
def testnegative(self):
При вычислении факториала отрицательного числа должно возникать исключение ValueError
with self.assertRaises(ValueError):
self.factorial.calculate(-1)
class TestCalculator(unittest.TestCase):
def setUp(self):
Инициализируем экземпляр класса Calculator для каждого теста
self.calculator = Calculator()
def testddition(self):
Тестируем метод сложения
self.assertEqual(self.calculator.add(2, 3), 5)
self.assertEqual(self.calculator.add(-1, 1), 0)
self.assertEqual(self.calculator.add(0, 0), 0)
def testultiplication(self):
Тестируем метод умножения
self.assertEqual(self.calculator.multiply(2, 3), 6)
self.assertEqual(self.calculator.multiply(-1, 1), -1)
self.assertEqual(self.calculator.multiply(0, 100), 0)
if == :
unittest.main()
Комментарии по коду тестов:
- Для каждого класса тестов (TestFactorial и TestCalculator) мы создаём метод setUp(), который создаёт нужный экземпляр тестируемого класса.
- В TestFactorial проверяем:
• Корректность вычисления факториала для 0 и 1.
• Для положительных чисел (например, 3 и 5).
• Что метод выбрасывает исключение ValueError при передаче отрицательного числа.
- В TestCalculator проверяются операции сложения и умножения с различными входными данными (в том числе отрицательными и нулевыми).
————————————————————————————
Шаг 4. Запуск тестов
Чтобы запустить тесты, скопируйте весь приведённый код в один файл (например, main.py) и выполните его. Если все тесты пройдут успешно, среда выведет сообщение об успешном прохождении тестов.
————————————————————————————
Итоговое решение
Мы разработали два класса – Factorial и Calculator, для которых реализовали модульные тесты с подробными комментариями. Это демонстрирует принцип автоматизированного тестирования модулей (unit testing). Вы можете запускать и расширять данные тесты в любой удобной для вас среде программирования.
Такое решение соответствует требованиям задания: вариант 3 (класс расчёта факториала) и вариант 5 (класс по собственному усмотрению – калькулятор с методами сложения и умножения).
Надеюсь, это пошаговое объяснение поможет вам понять принцип построения модульных тестов и автоматизации проверки кода.