WE CODE NOW
  • Home 
  • Blog 
  • Guides 
Guides
  1. Home
  2. Guides
  3. Python Programming
  4. Unit Testing in Python with Unittest

Unit Testing in Python with Unittest

Posted on June 1, 2024  (Last modified on June 8, 2024) • 2 min read • 268 words
Python
 
Unit Testing
 
Unittest
 
Mocking
 
Python
 
Unit Testing
 
Unittest
 
Mocking
 
Share via
WE CODE NOW
Link copied to clipboard

Learn how to write and run unit tests in Python using the `unittest` module, including test cases, test suites, and mocking.

On this page
  • Writing Test Cases
    • Basic Test Case
  • Test Suites
    • Creating a Test Suite
  • Mocking
    • Using Mock for Dependencies
  • Running Tests
    • Command-Line
    • Test Discovery
  • Conclusion

Unit Testing in Python with Unittest  

Unit testing ensures your code works as expected. This guide covers writing and running unit tests in Python using the unittest module, including test cases, test suites, and mocking.

Writing Test Cases  

Basic Test Case  

import unittest

def add(x, y):
    return x + y

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

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

Test cases can include multiple tests.

class TestMathFunctions(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
    def test_subtract(self):
        self.assertEqual(add(10, -3), 7)

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

Test Suites  

Creating a Test Suite  

def suite():
    suite = unittest.TestSuite()
    suite.addTest(TestMathFunctions("test_add"))
    suite.addTest(TestMathFunctions("test_subtract"))
    return suite

if __name__ == "__main__":
    runner = unittest.TextTestRunner()
    runner.run(suite())

Test suites allow you to group tests logically.

def suite():
    suite = unittest.TestSuite()
    suite.addTests(
        unittest.defaultTestLoader.loadTestsFromTestCase(TestMathFunctions)
    )
    return suite

if __name__ == "__main__":
    runner = unittest.TextTestRunner()
    runner.run(suite())

Mocking  

Using Mock for Dependencies  

from unittest.mock import MagicMock

class TestAPI(unittest.TestCase):
    def test_api_call(self):
        mock_api = MagicMock(return_value={"status": "success"})
        response = mock_api()
        self.assertEqual(response["status"], "success")

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

Mocking can simulate complex dependencies.

class TestService(unittest.TestCase):
    def test_service(self):
        mock_api = MagicMock()
        mock_api.get_data.return_value = {"key": "value"}

        service = MyService(mock_api)
        data = service.fetch_data()
        self.assertEqual(data["key"], "value")

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

Running Tests  

Command-Line  

Run your tests from the command line.

python -m unittest test_module.py

Test Discovery  

Discover and run tests in the current directory.

python -m unittest discover

Test discovery with custom settings.

python -m unittest discover -s tests -p "test_*.py"

Conclusion  

Unit testing with unittest ensures your code works correctly and prevents future bugs. Practice writing test cases, creating test suites, and using mocking to test your Python code effectively.

 Asynchronous Programming with Asyncio
Integrating Databases with Python 
On this page:
  • Writing Test Cases
    • Basic Test Case
  • Test Suites
    • Creating a Test Suite
  • Mocking
    • Using Mock for Dependencies
  • Running Tests
    • Command-Line
    • Test Discovery
  • Conclusion
Copyright © 2025 WE CODE NOW All rights reserved.
WE CODE NOW
Code copied to clipboard