Perl 将Moose与Test::Class一起使用-构造函数的问题

Perl 将Moose与Test::Class一起使用-构造函数的问题,perl,moose,Perl,Moose,我正在重构一个构建在上面的测试套件,并希望充分利用诸如在基本测试类和一些测试类中的优点 我试过: 在基本测试类中使用 在基类中使用MooseX::InsideOut 设置make_不可变(内联_构造函数=>0) 尽管我以前从未使用过这两个模块中的任何一个,也不能确定我是否正确使用了它们。在我的所有测试中,我在运行测试套件时都收到以下错误: 类内部看起来很混乱。您是否在一个实例中重写了new() 子类还是通过多重继承 产生此故障的简单示例: 基本测试等级: package My::Test::

我正在重构一个构建在上面的测试套件,并希望充分利用诸如在基本测试类和一些测试类中的优点

我试过:

  • 在基本测试类中使用
  • 在基类中使用
    MooseX::InsideOut
  • 设置
    make_不可变(内联_构造函数=>0)
尽管我以前从未使用过这两个模块中的任何一个,也不能确定我是否正确使用了它们。在我的所有测试中,我在运行测试套件时都收到以下错误:

类内部看起来很混乱。您是否在一个实例中重写了new() 子类还是通过多重继承

产生此故障的简单示例:

基本测试等级:

package My::Test::Class::Base;

use Moose;
use Test::Class::Most;

1;
package Test::Package::Class;

use Moose;
use Test::Class::Most parent => 'My::Test::Class::Base';

sub blah : Tests() {
    my $test = shift;
    can_ok($test->class(), 'blah');
}

1;
测试类:

package My::Test::Class::Base;

use Moose;
use Test::Class::Most;

1;
package Test::Package::Class;

use Moose;
use Test::Class::Most parent => 'My::Test::Class::Base';

sub blah : Tests() {
    my $test = shift;
    can_ok($test->class(), 'blah');
}

1;
正在测试的类别:

package Package::Class;

use Moose;

sub blah {
    my $self = shift;
    return 1;
}

1;

那么,我做错了什么呢?

这里的问题是Test::Class不希望您重写它的新()构造函数,但Moose正是这样做的。人们一直问我如何处理这个问题,所以我最近写了一封信。它目前只出现在Github上,因为它是alpha,但它似乎相当合理。请注意,与此类似,我们也为您提供了常见的测试功能

如果您尝试过,请让我知道并提供反馈,以便我更好地了解人们的需求

如果你想在CPAN上做点什么,有几种选择

它使用。很多人不喜欢这样

您可能觉得语法不直观,但它似乎是一个很好的模块


与Test::Routine的问题相同。

是的,这就是为什么我一直在使用MooseX::NonMoose等工具,试图让moose与Test::Class构造函数配合得很好。我将为我自己的项目玩一下Test::Class::Moose,然后再与您联系。这个问题是由$work引发的;将这个项目从Test::Class迁移到另一个测试平台将是一场对抗惰性和管理(争取时间)的斗争。除非有一个肮脏的黑客让Test::Class和Moose合作,否则我想我会成为一个没有角色的人Snickisfat:当你没有Moose或其他选择时,你可以使用我的模块来获得角色。我承认我对Role::Basic的接口从来都不是很满意,但它应该可以做到这一点。