title: How to avoid code duplication in unit tests
body: <p>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 <em>one</em> 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?</p>
  
  <pre class="lang-py prettyprint-override"><code>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))
  </code></pre>
  
  <p>Cheers</p>