package main; our @args = qw(foo bar baz); package WithMeta; use Moose; use MooseX::MultiInitArg; has x => ( metaclass => 'MultiInitArg', is => 'ro', isa => 'Str', init_args => \@main::args, required => 1, ); package WithTrait; use Moose; use MooseX::MultiInitArg; has x => ( traits => ['MooseX::MultiInitArg::Trait'], is => 'ro', isa => 'Str', init_args => \@main::args, required => 1, ); package main; use Test::More tests => 10; foreach my $class qw(WithTrait WithMeta) { my $foo = $class->new(x => 'x'); is($foo->x, 'x', "$class x works"); foreach my $arg (@args) { my $x = $class->new($arg => $arg); is($x->x, $arg, "$class $arg works."); } eval {my $fail = $class->new(x => 'y', foo => 'bar')}; ok($@, "Supplying more than one arg to $class causes death."); }