Using fixtures to create temporary files

The next thing want to do is be able to pass a filename to analyze_text() so that it knows what to process. Of course, for analyze_text() to work this filename should refer to a file that actually exists! To make sure that a file exists for our tests, we're going to define some fixtures.

The first fixture we can define is the method TestCase.setUp(). If defined, this method is run before each test method in the TestCase. In this case, we'll use setUp() to create a file for us and remember the filename as a member of the TestCase:

# text_analyzer.py

class TextAnalysisTests(unittest.TestCase):
. . .
def setUp(self):
"Fixture that creates a file for the text methods to use."
self.filename = 'text_analysis_test_file.txt'
with open(self.filename, 'w') as f:
f.write('Now we are engaged in a great civil war, '
'testing whether that nation, '
'or any nation so conceived and so dedicated, '
'can long endure.')

The second fixture available to us is TestCase.tearDown(). The tearDown() method is run after each test method in the TestCase, and in this case we're going to use it to delete the file we created in setUp():

# text_analyzer.py

import os
. . .
class TextAnalysisTests(unittest.TestCase):
. . .
def tearDown(self):
"Fixture that deletes the files used by the test methods."
try:
os.remove(self.filename)
except OSError:
pass

Note that since we're using the os module in tearDown() we need to import it at the top of the file.

Also notice how tearDown() swallows any exceptions thrown by os.remove(). We do this because tearDown() can't actually be certain that the file exists, so it simply tries to remove the file and assumes that any exception can safely be ignored.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset