samedi 26 octobre 2019

How to avoid code duplication in unit tests

Suppose I have a function called "factorial" and I want to test this function. I often find myself rewriting unit tests like the one shown below where I define some test cases, possibly including some edge cases, running tests for all of those. This common pattern, defining the test values and expected output and running tests on them leaves me with the following boilerplate code. Essentially I would like to have one function to which I pass the list of test values with the list of expected values and the function to test it on and let the framework handle the rest for me. Does something like that exist and what would speaks against such a simplified approach?

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))

Cheers

Aucun commentaire:

Enregistrer un commentaire