## # testing package MyClass { use Moo; with 'Moo::Role::DBIConnection'; }; use Test::Most 'die'; my %args = ( dsn => 'dbi:mysql:database=mysql', user => 'ntonkin', password => undef, options => { RaiseError => 1 }, ); subtest 'With no args' => sub { dies_ok sub { my $o = MyClass->new }, 'exception on no args'; }; subtest 'With bad type' => sub { throws_ok { my $o = MyClass->new(dbh => [\%args]) } qr/Not a DB handle nor a hashref/; }; subtest 'With existing handle' => sub { my $dbh = DBI->connect( @args{qw/dsn user password options/} ); cmp_ok( $dbh->do('select count(*) from db'), '>', 0, 'Found a DB' ); my $o = new_ok('MyClass', [dbh => $dbh], 'No exception with handle passed in'); cmp_ok( $o->dbh->do('select count(*) from db'), '>', 0, 'Found a DB via obj'); }; subtest 'With bad params' => sub { local $args{user} = 'frobnicator'; throws_ok { my $o = MyClass->new(dbh => \%args) } qr/coercion for "dbh" failed/; throws_ok { my $o = MyClass->new(dbh => \%args) } qr/Access denied for user/; }; subtest 'With params' => sub { my $o = new_ok('MyClass', [dbh => \%args], 'No exception with args hash passed in'); cmp_ok( $o->dbh->do('select count(*) from db'), '>', 0, 'Found a DB via obj'); dies_ok sub { print $o->dsn }, 'No DSN accessor!'; }; done_testing;