Chapter 3
■
Unittest
52
class TestClass10(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""called only once, before any test in the class"""
print("In setUpClass()...")
def setUp(self):
"""called once before every test method"""
print("\nIn setUp()...")
def test_case01(self):
print("In test_case01()")
self.assertEqual(math_obj.add(2, 5), 7)
def test_case02(self):
print("In test_case02()")
def tearDown(self):
"""called once after every test method"""
print("In tearDown()...")
@classmethod
def tearDownClass(cls):
"""called once, after all the tests in the class"""
print("In tearDownClass()...")
Add test_module09 to __init__.py in the test directory to make it part of the test
package.
Run the code from the test directory using the following command:
python3 -m unittest -v test_module09
It will throw an error as follows:
from mypackage.mymathlib import *
ImportError: No module named 'mypackage'
That’s because the mypackage module is not visible from the test directory. It
lives not in the test directory, but in the chapter03 directory.
This module cannot be
executed from the test directory. You must execute this module as a part of the test
package. You can do this from the chapter03 directory. The mypackage module is visible
in this directory as mypackage, which is a subdirectory of chapter03.
Navigate to the chapter03 directory and run this module as follows:
python3 -m unittest -v test.test_module09
Chapter 3
■
Unittest
53
Here is the output of the execution:
In setUpModule()...
Creating object : mymathlib
In setUpClass()...
test_case01 (test.test_module09.TestClass10) ...
In setUp()...
In test_case01()
In tearDown()...
ok
test_case02 (test.test_module09.TestClass10) ...
In setUp()...
In test_case02()
In tearDown()...
ok
In tearDownClass()...
In tearDownModule()...
Destroying object : mymathlib
----------------------------------------------------------------------
Ran 2 tests in 0.004s
OK
That’s how you organize the development and testing
code files in separate
directories. It is standard practice to separate these code files.
Test Discovery
Test discovery is the process of discovering and executing all the tests in the project
directory and all its subdirectories. The test discovery process
is automated in unittest
and can be invoked using the discover sub-command. It can be invoked with the
following command:
python3 -m unittest discover
Here is the partial output of this command when it runs in the chapter02 directory:
..
Running Test Method : test_case01
.
Running Test Method : test_case02
.
Running Test Method : test_case01
We're in custom made function : add
.
Chapter 3
■
Unittest
54
Running Test Method : test_case02
.
Running Test Method : test_case03
We're in custom made function : add
F
Running Test Method : test_case04
F
Classname : TestClass04
Running Test Method : test_case01
You can also invoke it using the verbose mode with the following command:
python3 -m unittest discover -v
Here is the partial output of this command:
test_case01 (test.test_module01.TestClass01) ... ok
test_case02 (test.test_module01.TestClass01) ... ok
test_case01 (test.test_module02.TestClass02) ...
Running Test Method : test_case01
ok
test_case02 (test.test_module02.TestClass02) ...
Running Test Method : test_case02
ok
test_case01 (test.test_module03.TestClass03) ...
Running Test Method : test_case01
We're in custom made function : add
ok
test_case02 (test.test_module03.TestClass03) ...
Running Test Method : test_case02
ok
test_case03 (test.test_module03.TestClass03) ...
Running Test Method : test_case03
We're in custom made function : add
As you
can see in the verbose output, the unittest automatically found and ran all
the test modules located in the chapter03 directory and its subdirectories. This saves you
the pain of running each test module separately and collecting the results individually.
Test discovery is one of the most important features of any automation testing framework.
Coding Conventions for unittest
As you have seen, test discovery automatically finds and runs
all the tests in a project
directory. To achieve this effect, you need to follow some coding and naming conventions
for your test code. You may have noticed already that I have consistently followed these
conventions in all the code examples in this book.
Chapter 3
■
Unittest
55
• In order to be
compatible with test discovery, all of the test files
must be either modules or packages importable from the top-
level directory of the project.
• By default, the test discovery always
starts from the current
directory.
• By default, test discovery always searches for test*.py patterns in
the filenames.
Assertions in unittest
You have learned about a few basic assertions, like assertEqual() and assertTrue().
The following tables list the most used assertions and their purpose.
Do'stlaringiz bilan baham: