Home Python C Language C ++ HTML 5 CSS Javascript Java Kotlin SQL DJango Bootstrap React.js R C# PHP ASP.Net Numpy Dart Pandas Digital Marketing

Writing Test Cases, Test Suites in Python


In Python, automated testing is made easy with the unittest module, which allows you to write test cases and group them into test suites. Test cases help verify that the functions and methods in your code work as expected. Test suites, on the other hand, allow you to organize and execute a collection of test cases together. This article explains how to write test cases and group them into test suites using the unittest module.

Writing Test Cases

A test case is a method that checks if a specific part of your code is working correctly. It should be written inside a class that inherits from unittest.TestCase.

Here is an example of writing a simple test case:

    import unittest

    def add(a, b):
        return a + b

    class TestMathOperations(unittest.TestCase):
        def test_add(self):
            result = add(2, 3)
            self.assertEqual(result, 5)  # Check if the result is 5

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

In this example, the test_add method is a test case that checks if the add function correctly adds two numbers.

Common Assertions

The unittest module provides several assertion methods to test various conditions:

Writing Test Suites

A test suite is a collection of test cases that are grouped together. You can create a test suite by using the unittest.TestSuite() class.

Here is an example of creating a test suite and running multiple test cases together:

    import unittest

    def multiply(a, b):
        return a * b

    class TestMathOperations(unittest.TestCase):
        def test_add(self):
            self.assertEqual(add(2, 3), 5)

        def test_multiply(self):
            self.assertEqual(multiply(2, 3), 6)

    if __name__ == '__main__':
        # Create a test suite
        suite = unittest.TestSuite()

        # Add test cases to the suite
        suite.addTest(TestMathOperations('test_add'))
        suite.addTest(TestMathOperations('test_multiply'))

        # Run the test suite
        runner = unittest.TextTestRunner()
        runner.run(suite)
        

Output:

    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.001s

    OK
        

Running All Tests Automatically

You can also automatically discover and run all tests in a module or a directory using the unittest.defaultTestLoader. Here is an example:

    import unittest

    def subtract(a, b):
        return a - b

    class TestMathOperations(unittest.TestCase):
        def test_add(self):
            self.assertEqual(add(2, 3), 5)

        def test_subtract(self):
            self.assertEqual(subtract(5, 3), 2)

    if __name__ == '__main__':
        # Discover and run all tests in the current directory
        unittest.main()
        

Output:

    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.002s

    OK
        

Test Suite Setup and Teardown

Sometimes you need to prepare a test environment before running a test suite and clean it up afterward. You can use the setUp and tearDown methods in your test suite to perform setup and teardown actions.

    import unittest

    class TestSetupTeardown(unittest.TestCase):
        def setUp(self):
            print("Setting up the test environment")
            self.data = [1, 2, 3]

        def tearDown(self):
            print("Tearing down the test environment")
            self.data = []

        def test_data_length(self):
            self.assertEqual(len(self.data), 3)

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

Output:

    Setting up the test environment
    .
    Tearing down the test environment
    ----------------------------------------------------------------------
    Ran 1 test in 0.002s

    OK
        

Conclusion

Writing test cases and organizing them into test suites helps you automate the process of testing your code. The unittest module provides powerful tools for writing, running, and organizing tests. By grouping related tests into test suites, you can easily manage and run tests for large projects.

With features like assertions, automatic test discovery, and setup/teardown methods, unittest makes it easy to maintain the correctness of your code and ensure that your applications work as expected.



Advertisement





Q3 Schools : India


Online Complier

HTML 5

Python

java

C++

C

JavaScript

Website Development

HTML

CSS

JavaScript

Python

SQL

Campus Learning

C

C#

java