This files covers unit testing in Python. Unit testing has several benefits:
There are other important aspects to unit testing, but the three points outlined above provide a simple, easy to understand starting point for a technology that is really more than a technology, and that can be thought of as a philosophy for architecting and managing projects.
In this section you will see a simple example of how to write a few simple tests. First I will show you a program that does some simply File IO. Then I will show you code that tests these operations to confirm that they work as expected. In particular, the code tests to see if a method that is designed to write and read from a file actually creates a file, and actually writes and reads the expected value from the file. This example is not meant to be an exhaustive test of the sample class, but rather a demonstration of who to use the basic syntax of unit testing.
The file to test:
#!/usr/bin/python
class SimpleFile(object):
def __init__(self, fileName):
self.fileName = fileName
def write_text(self, textToWrite):
f = open(self.fileName, 'w')
f.write(textToWrite)
f.close()
def read_text(self):
f = open(self.fileName, 'r')
read = f.read()
return read
The file that tests it contains several important features:
You must have these features in your unit tests. For instance, the way you tell the unit test library that a particular method is a test is to have it begin with the word test.
#!/usr/bin/python
import unittest
import os
from files.core import SimpleFile
class Test(unittest.TestCase):
def get_file_name(self):
fileName = "bar.txt"
return fileName
def get_file_text(self):
textToWrite = "This line"
return textToWrite
def test_write_file(self):
simple_file = SimpleFile(self.get_file_name())
simple_file.write_text(self.get_file_text())
self.assertTrue(os.path.isfile(self.get_file_name()))
def test_read_file(self):
simple_file = SimpleFile(self.get_file_name())
read_text = simple_file.read_text()
self.assertEqual(read_text,self.get_file_text())
suite = unittest.TestLoader().loadTestsFromTestCase(Test)
unittest.TextTestRunner(verbosity=2).run(suite)
If you have something that you want to do before each test is run, add a setup method to your testcase:
class Test(unittest.TestCase):
def setUp(self):
self.chords = SimpleDbChords("Chords")
self.contentType = self.chords.getHeader()
Just as setUp() runs before each test, a method called tearDown() will be run after each test. It is important to understand that this is very different from a constructor or destructor. The setUp and testDown methods are not called when the object is created or destroyed, but rather before and after each test is run.\
Copyright © Charlie Calvert | Elvenware Home | Writing Code | Delphi | CSharp | My Books