unittest of file-reading function
Peter Hansen
peter at engcorp.com
Tue Oct 18 08:49:47 EDT 2005
Helge Stenstroem wrote:
> Say I have a function
>
> def f(filename):
> result = openFileAndProcessContents(filename)
> return result
>
> Can that function be unit tested without having a real file as input?
> Something along the lines of
>
> import unittest
> class tests(unittest.TestCase):
> def test1(self):
> fileContents = "bla bla bla\nmore bla bla bla"
> ??? # make f read this string instead of opening a file
> expected = expectedResult
> result = f(filename)
> self.assertEqual(result, expected)
>
> One possibility would be to make the unit test write to a temporary
> file. Are there better alternatives?
The simplest approach is to use a StringIO. Often that will require
passing a "file" object to the routine instead of a file *name*, but
often that's better anyway (decouples file management and parsing).
Another approach is to create a "mock file" object. Depending on your
needs, this can be a very simple or a very complex thing to do. I can
offer more detail/suggestions here if you need.
-Peter
More information about the Python-list
mailing list