[fpc-pascal] fpcUnit testing Exceptions
Dean Zobec
dezobec at tin.it
Fri Jul 14 19:28:32 CEST 2006
Graeme Geldenhuys wrote:
> Hi,
>
> Is it possible to test the code below using the AssertException()
> call? I am sure it must be, I am just not sure how to use it.
>
> This is the work-around I have now, untill I can figure out how to use
> AssertException() correctly.
> ------------------------
> try
> si.SetSlideName('006~sa.swf');
> si.SlideTypeDB; { <<== method raises an error if type unknown }
> except
> on E: exception do
> begin
> AssertEquals('Failing on 3', EUnknownSlideType.ClassName,
> E.ClassName);
> end;
> end;
> ------------------------
>
> I tried the following, but got a compiler error on each one.
>
> -----------------------------
> si.SetSlideName('006~sa.swf');
> { none of the following worked... }
> AssertException('Failing on 3', EUnknownSlideType, @si.SlideTypeDB);
> AssertException('Failing on 3', EUnknownSlideType, si. at SlideTypeDB);
> AssertException('Failing on 3', EUnknownSlideType, si.^SlideTypeDB);
> -----------------------------
from the FPCUnit code:
class procedure AssertException(const AMessage: string; AExceptionClass:
ExceptClass; AMethod: TRunMethod); overload;
where
TRunMethod = procedure of object;
How is SlideTypeDB defined?
the correct way should be
AssertException('Failing on 3', EUnknownSlideType, @si.SlideTypeDB);
provided SlideTypeDB is a simple procedure with no parameters
and you are using
{$mode objfpc}
See the examples and the tests in the fcl/fpcunit directory on how to
use AssertException
Btw, there is an elegant way to test that a proper exception is raised
without using AssertException e.g. (from fcl/fpcunit/tests/asserttest.pp):
procedure TAssertTest.TestAssertNull;
var
obj: TObject;
begin
AssertNull(nil);
obj := TObject.Create;
try
AssertNull(obj);
except
on E: EAssertionFailedError do
begin
obj.Free;
Exit;
end;
end;
obj.Free;
Fail('failure: obj is not null!');
end;
Ciao,
Dean
More information about the fpc-pascal
mailing list