Ok, now that I understand what library you're using ...

On Fri, Jun 25, 2004 at 04:41:15PM +0100, Tony Bowden wrote:
> On Fri, Jun 25, 2004 at 11:10:19AM -0400, Andrew Pimlott wrote:
> > I was responding to your suggestion to put all the tests in one method
> > if they are just parametrized by data.  How do you suggest writing the
> > equivalent of
> >     foreach (@test_data) {
> >         is(my_func($_->{input}), $_->{output}, $_->{test_name});
> >     }
> > in xUnit style, such that the first failure does not cause the rest not
> > to run?
> 
> erm,
> 
> sub test_my_func : Test(no_plan) {
>   my $self = shift;
>   my @test_data = get_test_data_from_somewhere();
>   $self->num_tests(scalar @test_data);
>   foreach (@test_data) {
>     is(my_func($_->{input}), $_->{output}, $_->{test_name});
>   }
> }

By not using the failure == exception part of the xUnit model, you avoid
the issue I was getting at.  Obviously, the above would stop after the
first test data that provokes a failure if you were using that model,
which is why I consider it limiting.

You are also circumventing the isolation part of the xUnit model,
because you don't get setup/teardown for each test data.  Possibly you
don't care about that in this case, but if you did, you wouldn't be able
to do the above, so I consider this another limitation.

So to me, the above code is basically Test::More style, just using
methods for organization.  On that note, it seems that for some people
the appeal of xUnit-style testing is less the model above (failure ==
exception, isolation), and more the modularity and reuse you can get by
writing your tests with objects.  On this point there's not much to
argue about--if that helps you write better tests, great!

Which leaves me wondering if anyone defends Test::Unit per se.  :-)

Andrew

Reply via email to