2013-07-20 53 views
2

語境:如何使用Test :: More和朋友自動測試繼承行爲?

說我有相互繼承幾個模塊(使用老派的繼承與baseparent,不駝鹿或類似)。 Foo::Bar繼承FooFoo::Bar::Baz繼承Foo::Bar。所有這些模塊都有用Test::More編寫的測試套件。子類的測試套件只測試它實現的方法。子類不一定會覆蓋其父母中的所有方法,儘管他們可能會添加父母不具備的新方法。

問:

有一些測試框架,技術或Test::More功能與我可以寫測試,不僅要測試的具體子類的行爲,但也將隨後運行任何繼承的行爲測試套件/父類以及?基本上,我正在尋找一些東西,它允許我爲子類的獨特/特殊行爲編寫測試,但也會測試並確保子類在測試中的行爲與預期的父類相同。

我已經試過:

我已經寫了與建立一個字符串指定模塊的實例,並取決於什麼類型的模塊運行測試反對發電機方法非常簡單的測試工具被請求(有一箇中央哈希,保持跟蹤子類/超類層次結構),但這似乎很粗糙。我假設(像我在Perl中需要做的大多數事情),其他人已經以更加優雅和穩健的方式做到了這一點。

回答

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'} 

瞧!您現在在Foo::Bar::Baz上運行Test::Foo::Bar的所有測試,並且您可以自由覆蓋或對自己的內容進行新的測試。

色在他的博客徹底例如:Resuing Test Code with Test::Class

你說得對已有的測試工具。 Test::Class,Test::Harnessprove的混合物應該照顧你的需求,而且沒有什麼理由寫你自己的。