in reply to croak() does not "die" when DESTROY is used

The eval in Testing::DESTROY is called before you print the error. So the script has already forgotten the previous error. You should localize $@ before you run eval blocks.
This should do the fix.
sub DESTROY { my $self = shift; local $@; eval { $self->{tree} = $self->{tree}->delete(); }; }