To assert or assertEqual in Python unit testing


14th of February 2009

When you write unit tests in Python you can use these widgets:

 self.assertEqual(var1, var2, msg=None)
 self.assertNotEqual(var1, var2, msg=None)
 self.assertTrue(expr, msg=None)
 self.assertRaises(exception, func, para, meters, ...)

That's fine but is it "pythonic" enough? The alternative is to do with with "pure python". Eg:

 assert var1 == var2, msg
 assert var1 != var2, msg
 assert expr, msg
 try:
    func(para, meter)
    raise Exception
 except exception:
    pass

I'm sure there are several benefits with using the unittest methods that I don't understand but I understand the benefits of brevity and readability. The more tests you write the more tedious it becomes to write self.assertEquals(..., ...) every time. In my own code I prefer to use simple assert statements rather than the verbose unittest alternative. Partially because I'm lazy and partially because they read better and the word assert is highlit in red in my editor so it just looks nicer from a distance.

Perhaps some much more clever people than me can explain what a cardinal sin it is to not use the unittest methods over the lazy more pythonic ones.

Incidentally, during the course of jotting down this blog I reviewed some old inherited code and changed this:

 self.assertEqual(len(errors),0)

into this:

 assert not errors

Isn't that just nicer to use/read/write?



Comment

Show all 16 comments
 
Name:
Email:
hide my email address.

Your email address will be encoded to prevent email-extraction spiders from reading it so you won't get spammed if you decide to show your email address.