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 -- http://mail.python.org/mailman/listinfo/python-list