package MyApp { use Zydeco declare => [qw(TestingRole)]; my $testing = true; role TestingRole { ...; } class Widget { ...; } if ($testing) { around new_widget (@args) { my $widget = $self->$next(@args); Moo::Role->apply_roles_to_object($widget, TestingRole->role); return $widget; } } } my $factory = 'MyApp'; print $factory->new_widget, "\n";