Exceptions can be tested safely with Test::Fatal (which is a thin
wrapper around Try::Tiny).

    use Test::Fatal;
    like(
        exception {
            Data::ObjectStore->open_store( $source_dir );
            fail( "was able to open a store with an old incompatable version" );
        },
        qr/Unable to open|lock file did not exist|Permission denied/i,
        'error message for opeining store with incompatable message',
    );

This is orthogonal to the core failure issue though.

On Thu, Jan 30, 2020 at 2:39 PM James E Keenan <jkee...@pobox.com> wrote:
>
> On 1/29/20 12:42 PM, Eric Wolf wrote:
> > I have a test that tries to catch a die in an eval. This works fine for
> > me locally, but the tester report indicates that it fails and bails at
> > this point.
> > To me this seems to indicate that the test harness is set up to barf on
> > this type of error or that my test is written or configured incorrectly.
> >
> > Should I just skip this test or is there some easy magic that can be
> > done for it?
> >
> > Thanks in advance,
> >     Eric Wolf aka canid
> >
> > *Test Code *(you can tell its genuine due to the speeling erorrs)
> >
> > 1159    eval {
> > 1160        my $store = Data::ObjectStore->open_store( $source_dir );
> > 1161        fail( "was able to open a store with an old incompatable
> > version" );
> > 1162    };
> > 1163    like( $@, qr/Unable to open|lock file did not exist|Permission
> > denied/i, 'error message for opeining store with incompatable message' );
> >
>
> To me, seeing a Test::More test within an eval block is a code smell.
> There's always a chance that the test may crash in some way that sets $@
> -- which would make the value of $@ ambiguous, at best.
>
> I don't completely understand what you're attempting to do, but ... Is
> there anything that prevents you from this?
>
> #####
> my $store;
> eval {
>      $store = Data::ObjectStore->open_store( $source_dir );
> };
> like( $@,
>      qr/Unable to open|lock file did not exist|Permission denied/i,
>      'error message for opeining store with incompatable message'
> );
> ok(! $store, "Was not able to open a store with an old incompatible
> version");
> #####
>
> > *Tester Output*
> > *
> > *
> >
> > Output from './Build test':
> >
> >   Permission denied at 
> > /tmp/loop_over_bdir-29197-caKZ6Z/Data-RecordStore-6.04-0/blib/lib/Data/RecordStore.pm
> >  line 194.
> >   at t/object_store.t line 20.
> >       main::__ANON__(" Permission denied at 
> > /tmp/loop_over_bdir-29197-caKZ6Z/Data-R"...) called at 
> > /tmp/loop_over_bdir-29197-caKZ6Z/Data-RecordStore-6.04-0/blib/lib/Data/RecordStore.pm
> >  line 194
> >       Data::RecordStore::open_store("Data::RecordStore", "DATA_PROVIDER", 
> > "/tmp/NWPz3HLh2e", "BASE_PATH", "/tmp/NWPz3HLh2e/RECORDSTORE") called at 
> > /tmp/loop_over_bdir-29197-caKZ6Z/Data-ObjectStore-2.12-0/blib/lib/Data/ObjectStore.pm
> >  line 53
> >       Data::ObjectStore::open_store("Data::ObjectStore", "/tmp/NWPz3HLh2e") 
> > called at t/object_store.t line 1160
> >       *eval {...} called at t/object_store.t line 1159*
> >       main::test_upgrade_db() called at t/object_store.t line 54
> >   Permission denied at 
> > /tmp/loop_over_bdir-29197-caKZ6Z/Data-RecordStore-6.04-0/blib/lib/Data/RecordStore.pm
> >  line 194.
> >   at t/object_store.t line 20.
> >       main::__ANON__(" Permission denied at 
> > /tmp/loop_over_bdir-29197-caKZ6Z/Data-R"...) called at 
> > /tmp/loop_over_bdir-29197-caKZ6Z/Data-RecordStore-6.04-0/blib/lib/Data/RecordStore.pm
> >  line 194
> >       Data::RecordStore::open_store("Data::RecordStore", "DATA_PROVIDER", 
> > "/tmp/NWPz3HLh2e", "BASE_PATH", "/tmp/NWPz3HLh2e/RECORDSTORE") called at 
> > /tmp/loop_over_bdir-29197-caKZ6Z/Data-ObjectStore-2.12-0/blib/lib/Data/ObjectStore.pm
> >  line 53
> >       Data::ObjectStore::open_store("Data::ObjectStore", "/tmp/NWPz3HLh2e") 
> > called at t/object_store.t line 1168
> >       main::test_upgrade_db() called at t/object_store.t line 54
> > # Tests were run but no plan was declared and done_testing() was not seen.
> > # Looks like your test exited with 13 just after 273.
> > t/object_store.t ..
> > Dubious, test returned 13 (wstat 3328, 0xd00)
> > All 273 subtests passed
> > t/cache.t ......... ok
> >
> >

Reply via email to