Is there a standard and/or acceptable way to make sure that pre-conditions, 
post-conditions, or invariants _fail_ when running unit tests? That is, lets 
say 
I had a function like this

void func(int x)
in
{
    assert(x < 8);
}
body
{
  //...
}


and I wanted to test to make sure that func() couldn't be called with any int 
greater or equal to 8, what would I do? The best that I can think of is to 
catch 
an AssertError and ignore it. e.g.

unittest
{
    try
    {
        func(8);
        assert(0);
    }
    catch(AssertionError ae)
    {}
}


But catching AssertionErrors is generally a bad idea. As I understand it, when 
anything derived from Error is thrown, code is not left in a proper state, with 
stuff like destructors being skipped. Would it be okay to catch it in a case 
like 
this, or is it a really bad idea? If it's a bad idea, I haven't a clue how to 
verify that pre-condition, post-conditions, and invariants are correct.

- Jonathan M Davis

Reply via email to