What is Unit test
Unit test is a process of testing an unit of testable code like functions, classes, procedures etc of an application using test code. Mainly programmers write unit tests for their codes while developing software. Unit testing reflects the programmers view on how things should work. This is the main theme of TDD (Test-driven development).
Unit test in python
In python there are some frameworks to do unit testing like unittest, nose, pytest etc. Among these, unittest module comes with default python installation.
I have written a function which will take an integer value as argument and return if that integer is even or odd.
pytesting/even_odd.py
# -*-coding: utf-8-*- def my_even_odd(number): if isinstance(number, int): if number % 2 == 0: return "Even" return "Odd" return "Integer required"
This function will return "Integer required" if it gets an argument other than int. And for each argument it should return a string. Here, I am going to test two things: one is if I pass an integer or a non integer argument what it will return and two, if it returns anything other than string.
pytesting/unittest_even_odd.py
# -*-coding: utf-8-*- import unittest from even_odd import my_even_odd test_values = [ (1, "Odd"), (0, "Even"), (2147483648, "Integer required"), (2147483647, "Odd"), (-2147483649, "Integer required"), (-2147483648, "Even"), ('', "Integer required"), ({'a': 1}, "Integer required"), ([2, 3, 5], "Integer required"),] class TestMyEvenOdd(unittest.TestCase): def test_my_even_odd(self): for tpl in test_values: self.assertEqual(my_even_odd(tpl[0]), tpl[1], msg="Failed for {}".format(tpl[0])) self.assertTrue(isinstance(my_even_odd(tpl[0]), str)) if __name__ == '__main__': unittest.main()
In unittest framework to create a test we need to create a subclass of unittest.TestCase class and add or override appropriate methods. In this case I added a method test_my_even_odd. There are two main parts. One is the test class we have written and another is test fixture. A test fixture represents the preparation needed to perform one or more tests, and any associate cleanup actions. This may involve, for example, creating temporary or proxy databases, directories, or starting a server process etc. In our case we keep it simple by using a list test_values. assertEqual and and assertTrue methods of a TestCase class.
assertEqual(self, first, second, msg=None)
This method will raise an AssertionError and test will fail if first and second objects are unequal as determined by `==`
assertTrue(self, expr, msg=None)
This method will check if the expression expr is True and raises AssertionError if False.
Now if we run unittest_even_odd.py we will get output like this,
$ python unittest_even_odd.py
.--------------------------------------------------------------------
Ran 1 test in 0.000s
OK
That means my little function passed the test.
No comments :
Post a Comment