Unit Testing With Python Unittest – Example & Working

1. Python Unittesting

In this Python Unittest tutorial, we will learn how to set up unit tests for our Python code. For this, we will use the module Unittest in Unit Testing with Python. Right before leaving, we will also introduce you to pytest, another module for the same thing. Moreover, we will discuss Python Unittest example and the working. Also, we will see Python Unit Testing Framework and assert.

So, let’s start Unit Testing with Python Unittest Tutorial.

Unit Testing With Python Unittest - Example & Working

Unit Testing With Python Unittest – Example & Working

2. What is Python Unittest?

Python Unittest is a Python Unit-Testing framework. Inspired by JUnit, it is much like the unit testing frameworks we have with other languages. Here are some features it supports-

  • Test automation
  • Sharing setup and shutdown code for tests
  • Aggregating tests into collections
  • Independence of tests from the framework

Do you know about Python Decorators

a. Concepts in an object-oriented way for Python Unittest

  • Test fixture- the preparation necessary to carry out test(s) and related cleanup actions.
  • Test case- the individual unit of testing.
  • A Test suite- collection of test cases, test suites, or both.
  • Test runner- component for organizing the execution of tests and for delivering the outcome to the user.

In this Python Unittest tutorial, we will use the unittest module to demonstrate our examples to you.

3. Python Unittest Example

In the following example of Unittest in Python, we will take a simple function that calculates the modulus 3 of a value.

>>> import unittest
>>> def modthree(x):                             #defining the function
      return x%3
>>> class Tests(unittest.TestCase):
      def test(self):                                  #test method
               self.assertEqual(modthree(4),1)
>>> if __name__=='__main__':
      unittest.main()

.
———————————————————————-
Ran 1 test in 0.010s
OK
Did you see the output?
Have a look at Python Classes and Objects

a. One More Example of Python Unittest

Now let’s try testing for string methods; we won’t need a function for this.

>>> class TestStringMethods(unittest.TestCase):
        def test_lstrip(self): #testing for left stripping
                 self.assertEqual('   hello '.lstrip(),'hello ')
        def test_isupper(self): #testing for isupper
                 self.assertTrue('HELLO'.isupper())
                 self.assertFalse('HELlO'.isupper())
        def test_split(self): #testing for split
                 self.assertEqual('Hello World'.split(),['Hello','World'])
                 with self.assertRaises(TypeError):
                         'Hello World'.split(2)
>>> if __name__=='__main__':
        unittest.main()

….
———————————————————————-
Ran 4 tests in 0.031s
OK

4. How Python Unittest Works?

So we’ve seen this Unit Testing with Python works without much effort. But how does this happen behind the scenes? Let’s find out.

a. Subclassing unittest.TestCase

Consider the following line-

class TestStringMethods(unittest.TestCase):

Here, we subclass unittest.TestCase. What we mean is we make our class TestStringMethods inherit from the class unittest.TestCase. Then, we define three methods, the names for which begin with ‘test’:
Let’s learn about Python String
test_lstrip()
test_isupper()
test_split()

b. Python Unittest Assert Methods

Now, let’s take a look at what methods we can call within Unit testing with Python:

  • assertEqual()- Tests that the two arguments are equal in value.
  • assertNotEqual()- Tests that the two arguments are unequal in value.
  • assertTrue()- Tests that the argument has a Boolean value of True.
  • assertFalse()- Tests that the argument has a Boolean value of False.
  • assertIs()- Tests that the arguments evaluate to the same object.
  • assertIsNot()- Tests that the arguments do not evaluate to the same object.
  • assertIsNone()- Tests that the argument evaluates to none.
  • assertIsNotNone()- Tests that the argument does not evaluate to none.
  • assertIn()- Tests that the first argument is in the second.
  • assertNotIn()- Tests that the first argument is not in the second.
  • assertIsInstance()- Tests that the first argument (object) is an instance of the second (class).
  • assertRaises()- Tests that Python raises an exception when we call the callable with positional/ keyword arguments we also passed to this method.

You must read Python Assert Statements

  • assertRaisesRegex()- Tests that regex matches on the string representation of the exception raised; similar to assertRaises().
  • assertWarns()- Tests that Python triggers a warning when we call the callable with positional/ keyword arguments we also passed to this method.
  • assertWarnsRegex()- Tests that regex matches on the message for the triggered warning; similar to assertWarns().
  • assertLogs()- Tests that Python has logged at least one message on the logger or a child of the logger; ensures this is with at least the level we mention.
  • assertAlmostEqual()- Tests that the first and second arguments have approximately equal values.
  • assertNotAlmostEqual()- Tests that the first and second arguments do not have approximately equal values.
  • assertGreater()- Tests that the first argument is greater than the second.
  • assertGreaterEqual()- Tests that the first argument is greater than or equal to the second.
  • assertLess()- Tests that the first argument is lesser than the second.
  • assertLessEqual()- Tests that the first argument is lesser than or equal to the second.
  • assertRegex()- Tests that a regex search matches the text.
  • assertNotRegex()- Tests that a regex search does not match the text.
  • assertCountEqual()- Tests that the first argument, which is a sequence, contains the same as does the second.
  • assertMultiLineEqual()- Tests that the first argument, which is a multiline string, is equal to the second.
  • assertSequenceEqual()- Tests that two sequences are equal.
  • assertListEqual()- Tests that two lists are equal.
  • assertTupleEqual()- Tests that two lists are equal.
  • assertSetEqual()- Tests that two sets are equal.
  • assertDictEqual()- Tests that two dictionaries are equal.

Now that we’ve discussed all these, you can go check the code once again. We used the methods assertEqual(), assertTrue(), assertFalse(), and assertRaises().

c. unittest.main()

This delivers a command-line interface to the test script. The output suggests whether the tests ran okay or failed.

5. Tests That Fail in Python Unittesting

What happens if a test fails? To make this happen, we refer to a string variable that doesn’t already exist.
Let’s revise Python Directory and Files

>>> class TestStringMethods(unittest.TestCase):
      def test_lstrip(self):
              self.assertEqual('   hello '.lstrip(),'hello ')
      def test_isupper(self):
              self.assertTrue('HELLO'.isupper())
              self.assertFalse('HELlO'.isupper())
      def test_split(self):
              self.assertEqual('Hello World'.split(),['Hello','World'])
              with self.assertRaises(TypeError):
                      s.split(2)
>>> if __name__=='__main__':
      unittest.main()

..E.
======================================================================
ERROR: test_split (__main__.TestStringMethods)
———————————————————————-
Traceback (most recent call last):
File “<pyshell#21>”, line 10, in test_split
NameError: name ‘s’ is not defined
———————————————————————-
Ran 4 tests in 0.016s
FAILED (errors=1)
You can see the error in the output. One of the tests failed and returned an error. It did so because we did not define a string s.

Python Interview Questions

6. Python Unittest – Testing With pytest

It was fun working with Python Unittest. But before leaving, we want to introduce you to pytest, a framework that makes it fun to write small tests. But that doesn’t limit it- we can scale it to support complex functional testing for applications and libraries.
First, install pytest with Python pip-
pip install pytest
You don’t have to import this in the IDLE; we create the following Python file on our Desktop-

def modthree(x):
   return x%3
def test_value():
   assert(modthree(4)==1)

We save this as demo.py. Then, we open the command line and get to the desktop. After that, we run a test-

Python Unittest

Python Unittest – Testing with pytest

Let’s make a test fail.
Do you know about Python Counter

def modthree(x):
   return x%3
def test_value():
   assert(modthree(4)==2)
Python Unittest

Python Unittest – pytest Testing in Python

So, this was all in Unit Testing with Python Unittest. Hope you like our explanation.

7. Conclusion – Python Unittest

Hence, in this Python Unittest tutorial, we discussed Unit Testing with Python. Moreover, we saw Python Unittest example and working. Also, we discussed Python Unit Testing frameworks and test case example with Python Unittest assert. We hope you can run your own tests for your code. In this tutorial, we saw how to do that with the Python Unittest and pytest modules. Furthermore, if you feel any difficulty while understanding the concept of Unit Testing with Python Unittest, feel free to ask with us through comments.
See also – 
Python Linear Regression
For reference

2 Responses

  1. Vinay Sharma says:

    Can you please add some content on mocking in Python (with 2-3 simple examples). It would be very helpful

    • DataFlair Team says:

      Hello Vinay,
      Thanks for your suggestion. Soon we will add content on Python mocking with examples.
      Keep Visiting DataFlair

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.