std.unittests vote tally
Jonathan M Davis
jmdavisProg at gmx.com
Tue Feb 8 09:20:15 PST 2011
On Tuesday, February 08, 2011 08:36:27 Andrei Alexandrescu wrote:
> On 2/8/11 10:54 AM, Jonathan M Davis wrote:
> > Enhancement request for assert:
> > http://d.puremagic.com/issues/show_bug.cgi?id=5547
>
> Thanks!
>
> > Okay. I'll look at doing another proposal which has the functionality of
> > assertPred which doesn't make sense to add to assert, though I'll
> > probably wait until the voting for assertNotThrown and
> > collectExceptionMsg is done.
> >
> > I would point out, however, that it would be rather silly to include
> > assertThrown and not assertNotThrown. Good unit tests should test _both_
> > that a function succeeds as it's supposed to _and_ that it fails as it's
> > supposed to. So, I would hope that people vote in favor of
> > assertNotThrown.
True. But the test is clearer if you're explicitly testing that the function
doesn't throw instead of just having a stray function call that isn't tested.
For instance.
assertNotThrown!DateTimeException(TimeOfDay(23, 59, 59));
is clearer than
TimeOfDay(23, 59, 59);
In the first case, it's clear that you're testing that the function call does not
throw. In the second, it's a function call that seems to do nothing, since its
result isn't saved, it takes no references, and it's not part of an assert.
Also, the first one results in an AssertError that clearly states that the
problem is that the function threw when it wasn't supposed to, whereas in the
second, you just get a stray exception which is likely going to be a bit hard to
track down - even with a stack trace - because the unit test blocks get named
with seemingly random numbers rather than real names and tracking down which
unittest block an exception was thrown from is a royal pain (one more reason why
we really should have named unit tests).
So, I think that assertNotThrown definitely helps with clarity, and it makes it
much easier to track down the failure.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list