2

環境:

互いに継承するいくつかのモジュールがあるとします ( Moose などではなく、 baseandを使用した昔ながらの継承を使用します)。継承し、継承します。これらのモジュールのすべてには、 で書かれたテスト スイートがあります。子クラスのテスト スイートは、それが実装するメソッドのみをテストします。子クラスは、親にない新しいメソッドを追加する場合がありますが、必ずしも親のすべてのメソッドをオーバーライドするわけではありません。parentFoo::BarFooFoo::Bar::BazFoo::BarTest::More

質問:

Test::Moreサブクラス固有の動作をテストするだけでなく、継承された動作/親クラスのテストスイートも実行するテストを作成できるテストフレームワーク、手法、または機能はありますか? 基本的に、サブクラスのユニークな/特別な動作のテストを作成できるものを探していますが、サブクラスがその親クラスが期待されるのと同じようにテストで動作することもテストして確認します.

私が試したこと:

文字列で指定されたモジュールのインスタンスを構築し、要求されたモジュールのタイプに応じてそれに対してテストを実行するジェネレーター メソッドを使用して、非常に単純なテスト ハーネスを作成しました (サブクラス/スーパークラスの階層を追跡する中央ハッシュがあります)。 、しかし、これは粗雑に思えます。私は、(私が Perl で行う必要があるほとんどのことと同様に) 他の誰かが、はるかにエレガントで堅牢な方法でこれを既に行っていると想定しています。

4

1 に答える 1

2

あなたが探しているのはTest::Class.

のテスト クラスを作成できFoo::Barます。これはおそらくTest::Foo::Bar. この Perl モジュールはTest::Class、その基本クラスとして を使用します。ただし、Foo::Bar直接テストする代わりに、メソッドを介してアクセスします。

sub class {'Foo::Bar'}

これにより、後でオーバーライドできます。

Test::Foo::Bar::Baz次に、から継承する新しいテスト クラスを作成しTest::Foo::Barます。これにより、親クラス用に作成したすべてのテストが自動的に継承されます。もちろん、class() をオーバーライドする必要があります。

sub class {'Foo::Bar::Baz'}

出来上がり!からすべてのテストを実行しているのでTest::Foo::BarFoo::Bar::Baz自由にオーバーライドしたり、心ゆくまで新しいテストを作成したりできます。

Chromatic のブログに完全な例があります: Test::Class を使用したテスト コードの再生成

そして、すでに存在するテスト ハーネスについては正しいです。Test::ClassTest::Harness、およびの混合物はproveニーズに対応する必要があり、独自のものを作成する理由はほとんどありません。

于 2013-08-09T14:46:20.560 に答える