3

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

我试过了:

  • 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;

那么,我做错了什么?

4

1 回答 1

2

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

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

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

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

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

与 Test::Routine 相同的问题。

于 2012-12-28T11:24:05.687 回答