【问题标题】:Using Moose with Test::Class - problems with constructor使用 Moose 和 Test::Class - 构造函数的问题
【发布时间】:2018-03-04 04:31:14
【问题描述】:

我正在重构基于Test::Class 构建的测试套件,并希望在基础测试类和某些测试类中利用MooseRoles 的优点

我试过了:

  • 在基础测试类中使用MooseX::NonMoose
  • 在基类中使用MooseX::InsideOut
  • 设置make_immutable( inline_constructor => 0 );

虽然我之前从未使用过任何MooseX 模块,也不能确定我是否正确使用了它们。在我的所有试验中,我在运行测试套件时收到以下错误:

Test::Class 内部似乎很混乱。你是否覆盖了 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 Package::Class;

use Moose;

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

1;

那么,我做错了什么?

【问题讨论】:

    标签: perl moose


    【解决方案1】:

    这里的问题是 Test::Class 不希望你重写它的 new() 构造函数,但是 Moose 就是这样做的。人们一直在问我如何处理这个问题,所以我最近写了Test::Class::Moose。它目前仅在 Github 上,因为它是 alpha 版,但看起来相当合理。注意,和Test::Class::Most一样,为你提供了常用的测试功能。

    如果您尝试过,请告诉我并提供反馈,以便我更好地了解人们想要什么。

    如果您想要 CPAN 上的某些内容,有多种选择。

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

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

    与 Test::Routine 相同的问题。

    【讨论】:

    • 是的,这就是为什么我一直在使用 MooseX::NonMoose 等来尝试让 moose 与 Test::Class 构造函数很好地放置在一起。我将在我自己的项目中使用 Test::Class::Moose,然后回复您。这个问题是由 $work 触发的;将此项目从 Test::Class 迁移到另一个测试平台将与惯性和管理作斗争(以便有时间去做)。除非有一个肮脏的黑客来让 Test::Class 和 Moose 合作,否则我想我会变得无角色
    • nickisfat:当您没有 Moose 或替代品时,您可以使用我的 Role::Basic 模块来获取角色。我承认我对 Role::Basic 的界面从来都不满意,但它应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多