Chris Rebert wrote: > On Fri, Jul 15, 2011 at 7:47 PM, Steven D'Aprano > <steve+comp.lang.pyt...@pearwood.info> wrote: > <snip> >> Assertions are for testing internal program logic, not for validation. >> >> (I don't even like using assert for testing. How do you test your code >> with assertions turned off if you use assert for testing?) > > I would think that would only matter if either the asserted > expressions caused side-effects or there was nontrivial logic in the > AssertionError handler, which would indicate a rather screwy codebase > and point to a possible PEBKAC issue that testing cannot hope to > remedy.
I'm not sure I follow you there... For any piece of code, I claim that we should test both with and without the -O switch. If I don't test it with -O, how do I know it works correctly when run with -O? Even if I don't use assert yourself, I don't know if the code I call uses assert badly and therefore is affected by -O. (I recently discovered that ElementTree, in the Python standard library, uses assert for data validation in at least some Python versions.) Besides, I don't know what -O does, apart from disabling assertions. Maybe nothing else. Maybe lots of things. It may change from version to version. Who knows? Whatever it does, it *shouldn't* change the semantics of my code, but it *could*, hence I better test it to find out if anything has changed. So are we agreed that it is wise to test code both with and without the -O switch? But here's the problem... the -O switch is global, and not module specific. So if your test suite looks like this: import mymodule assert hasattr(mymodule, "__all__") assert isinstance(mymodule.__version__, str) assert mymodule.count_spam("spam spam spam") == 3 a, b, c = mymodule.aardvark(42) assert a < b < c when running with -0, all those tests LITERALLY go away and you're left with a significantly smaller test suite: import mymodule a, b, c = mymodule.aardvark(42) which is hardly better than no test at all. -- Steven -- http://mail.python.org/mailman/listinfo/python-list