Как избежать дублирования кода в юнит-тестах - PullRequest
0 голосов
/ 27 октября 2019

Предположим, у меня есть функция с именем "factorial", и я хочу протестировать эту функцию. Я часто переписываю юнит-тесты, подобные показанному ниже, где я определяю некоторые тестовые случаи, возможно, включая некоторые крайние случаи, выполняя тесты для всех них. Этот общий паттерн, определяющий значения тестов и ожидаемый выходной результат и выполняющиеся на них тесты, оставляет мне следующий стандартный код. По сути, я хотел бы иметь функцию one , в которую я передаю список тестовых значений со списком ожидаемых значений и функцию для его тестирования и позволяю инфраструктуре обрабатывать все остальное для меня. Существует ли что-то подобное и что говорит против такого упрощенного подхода?

import unittest
class TestRecursionAlgorithms(unittest.TestCase):
    def test_factorial(self):
        input_values = [1, 2, 3, 4, 5]
        solutions = [1, 2, 6, 24, 120]

        for idx, (input_value, expected_solution) in enumerate(zip(input_values, solutions)):
            with self.subTest(test_case=idx):
                self.assertEqual(expected_solution, factorial(input_value))

Приветствия

1 Ответ

0 голосов
/ 27 октября 2019

Вы можете использовать вариант этого.

input_values = [1, 2, 3, 4, 5]
solutions = [1, 2, 6, 24, 120]
result = dict(zip(input_values, solutions)) # Key:Value
print(result)
match = {i: k for i, k in result.items() if i == k} # Key Value comparison
print(match)

результат:

{1: 1, 2: 2, 3: 6, 4: 24, 5: 120}
{1: 1, 2: 2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...