unittest: new reporting category "skipped"
Roy Smith
roy at panix.com
Thu Sep 23 09:43:07 EDT 2004
Remy Blank <remy.blank_asps at pobox.com> wrote:
> In a project I am working on, I have a series of tests that have
> to be run as root, and others as a normal user.
Having just completed a project which required testing as root, I can
sympathize with you completely! If at all possible, try to avoid
getting painted into that particular corner.
Is it possible that by building the appropriate test scaffolding, you
could run the tests as a normal user? For example, let's say the reason
you need to be root is because you are reading a file which is mode 600.
You could then do something like this:
class myFile:
"""Stub replacement for file class. Flesh this out enough to
supply whatever functionality your unit tests require."""
def __init__ (self, filename):
self.data = """this is line one
this is line two
this is line three"""
def read (self):
for line in self.data:
yield line
def myFileFactory (filename):
return myFile (filename)
file = myFileFactory
It's not always possible or practical to do that, but it's worth
thinking about.
Assuming this isn't going to work for you, then I do like your idea of
having a way to skip tests. Sounds like you want to subclass
TestResult, and add a addSkipped() method. You'd then probably need to
also subclass the appropriate TestRunner class to report the skipped
tests.
Another way would be to subclass TestSuite and override addTest(), but
my fear here is that skipped tests would just get quietly dropped. You
really want them to be tracked and alerted in the final report. You're
done testing when you get no failures and no skipped tests. Unless you
have a way to report the skips up to the top level TestRunner, it's too
easy to lose track of the skips.
Your idea of signaling skips with exceptions seems reasonable. You
might want to have more than one kind:
class SkippedTest
class NotRoot (SkippedTest)
class MissingTestResource (SkippedTest)
class TakesTooLong (SkippedTest)
Of course, the unit test gurus would probably be horrified at the whole
idea of skipping tests. A test either passes or fails, and you run
every test, every time. Turn all the dials up to ten, and all that.
It's your project, you decide what makes sense.
More information about the Python-list
mailing list