[파이썬] unittest 테스트 파라미터화하기

Unit testing is an important part of software development to ensure that our code works as expected. In Python, the unittest module is widely used for writing and executing tests. One common practice in unit testing is to parameterize the tests, which means running the same test case multiple times with different input values. This allows us to test different scenarios and edge cases more efficiently.

In this blog post, we will explore how to parameterize unit tests using the unittest module in Python. Let’s get started!

Installation

If you are using a recent version of Python (Python 3.4 or above), the unittest module is built-in and does not require any additional installation. However, if you are using an older version, you may need to install it separately using pip:

pip install unittest

Writing Parameterized Tests

To write parameterized tests, we need to create a test case class that inherits from the unittest.TestCase class. Within this class, we define our test methods prefixed with test_ and annotate them with the @unittest.parameterized.parameterized.expand decorator.

Let’s consider a simple example where we want to test a function that calculates the area of a rectangle. We will write a test case to validate the correctness of the function by passing different sets of parameters.

import unittest
from mymodule import calculate_rectangle_area

class RectangleAreaTestCase(unittest.TestCase):
    @unittest.parameterized.parameterized.expand([
        (2, 3, 6),  # width: 2, height: 3, expected area: 6
        (4, 5, 20),  # width: 4, height: 5, expected area: 20
        (0, 2, 0),  # width: 0, height: 2, expected area: 0
    ])
    def test_calculate_rectangle_area(self, width, height, expected_area):
        result = calculate_rectangle_area(width, height)
        self.assertEqual(result, expected_area)

if __name__ == '__main__':
    unittest.main()

In the example above, we define the RectangleAreaTestCase class and annotate the test_calculate_rectangle_area method with @unittest.parameterized.parameterized.expand. The decorator takes a list of test cases, where each test case is a tuple representing the input parameters and the expected result.

Within the test method, we access the input parameters as individual method arguments and perform the necessary assertions using the assertEqual method from the unittest.TestCase class.

To run the test case, we call unittest.main() at the end of the script.

Running Parameterized Tests

To execute the parameterized tests, simply run the script containing the test cases using any Python execution method (such as running the script from the command line or using an integrated development environment).

Upon running the script, the unittest module will process each test case individually and report the results for each test case.

Conclusion

In this blog post, we have learned how to parameterize unit tests using the unittest module in Python. By parameterizing our tests, we can verify the correctness of our code across different scenarios without duplicating test code.

Remember to always write descriptive test cases and provide meaningful values for the input parameters to cover a wide range of scenarios. Happy testing!