Inspired by RSpec (which in turn was inspired by TestDox).
A piece of code that transforms standard unittest output:
test_doesnt_raise_and_exception_when_None_was_passed (test_webui.TestSomeArbitraryMethod) ... ok test_returns_this_and_that_when_string_was_passed (test_webui.TestSomeArbitraryMethod) ... ok
into:
Some arbitrary method doesn't raise and exception when None was passed ... ok Some arbitrary method returns this and that when string was passed ... ok
Test case that generated output above looks like this:
class TestSomeArbitraryMethod(TestCaseWithSpec):
def test_returns_this_and_that_when_string_was_passed(self):
assert "this and that" == some_arbitrary_method("string")
def test_doesnt_raise_and_exception_when_None_was_passed(self):
try:
some_arbitrary_method(None)
except:
assert False
If you like it, grab the source code of TestCaseWithSpec.
hmm, nose used to print the docstrings out, which would IMO be a better way of doing this. can’t figure out how to make nose do that now, at least not in 5 minutes. More later.
Yeah, it prints the docstring, but it still looks suboptimal:
(test_file_name.TestClassName) “Test method docstring.”
I like TestDox-style output because it reads like a specification, not like a test output. And you don’t have to repeat the context name many times (docstrings can’t be inherited and extended, so it is non-trivial to solve this). On error you get a traceback, so there’s no problem in determining in which file test was defined.
I use RSpec for some time now and can ensure you that it causes no problems, while you got an agile documentation for free.
What would be really cool is nose using TestDox-style output for all tests it runs. This way you’ll get best of both worlds (no need to inherit from unittest.TestCase and automatic specs based on test cases).
I’m guessing that could be easily arranged ;)
In fact I have already started a related discussion on nose-users mailing list: http://groups.google.com/group/nose-users/browse_thread/thread/69e589c9994b2347