使用Moose with Test :: Class - 构造函数的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Moose with Test :: Class - 构造函数的问题相关的知识,希望对你有一定的参考价值。

我正在重构一个基于Test::Class构建的测试套件,并希望在基础测试类和一些测试类中利用Moose这样的Roles细节。

我试过了:

  • 在基础测试类中使用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;

那么,我做错了什么?

答案

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

如果您尝试,请告诉我并提供反馈,以便我更好地了解人们的需求。

如果你想要CPAN上的东西,有几种选择。

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

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

与Test :: Routine相同的问题。

以上是关于使用Moose with Test :: Class - 构造函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

Moose::Role 带有重写方法的怪异

使用 Perl/Moose,修饰符返回的值会发生啥变化?

为啥 Moose 代码这么慢?

Moose:角色中的共享属性

Perl:在 Moose 类中添加编写器拒绝属性访问

Moose 类属性类似于 Class::Data::Inheritable