Walter Bright wrote:
Adam Ruppe wrote:
On 7/15/10, Walter Bright <[email protected]> wrote:
Assertion failure should abort the current unittest block.
Do we all agree about the above?
Not me.
That's madness!
unittest {
auto a = something();
assert(a !is null);
a.stuff(); // if a is null, this is meaningless
}
Yes, and I could easily rewrite that as:
unittest {
auto a = something();
if (a)
a.stuff();
else
assert(0);
Is that worse than your rewrite of the following?
Everybody's happy except the guys like me who want to run all the unit
tests in one go.
What you could do is:
unittest { assert(my test); }
unittest { assert(my other test); }
unittest {
// complex test
}
It is a bit verbose, but you'd get all the results you want without
breaking cases like my first null assert one.
Yeah, but try it if you want to go through a table of inputs and
compare the results to a table of outputs. Of course, that can be
done, too, but it's extra code as well.
Can we all agree that a failed assert should end a "Unit test" ("Unit
test" != unittest)?
My thought is, that we might be running into issues because the idea of
a unit test is being conflated with a function. What we really want is a
collection of blocks of code that that are all run and if any of them
trigger an assert, that block stops and the tests as a whole are
considered to have failed.
As a point to start from, how about allow unittest as a statement type?
foreach(item; collection) unittest { asssert(foobar(item)); }
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos