我對(duì)如何開始測(cè)試抽象類的方式感到困惑。我應(yīng)該測(cè)試每種方法嗎?我應(yīng)該測(cè)試什么?我不應(yīng)該測(cè)試抽象類嗎?一個(gè)例子:abstract class Command{ private $params; public function with(array $params = []) { $this->params = $params; } public function getParams() { return $this->params; } abstract public function run();}我應(yīng)該像這樣測(cè)試它:/** @test */public function is_an_abstract_class(){ $command = $this->getReflectionClass(); $this->assertTrue($command->isAbstract());}/** @test */public function has_an_run_method(){ $command = $this->getReflectionClass(); $method = $this->getReflectionMethod('run'); $this->assertTrue($command->hasMethod('run')); $this->assertTrue($method->isAbstract()); $this->assertTrue($method->isPublic()); $this->assertEquals(0, $method->getNumberOfParameters());}
1 回答

冉冉說
TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
我不應(yīng)該測(cè)試抽象類嗎?
在大多數(shù)情況下,這將是我的選擇。
原因#1:某些類從抽象類繼承的事實(shí)是實(shí)現(xiàn)細(xì)節(jié),而不是行為。我們不想將我們的測(cè)試與實(shí)現(xiàn)細(xì)節(jié)結(jié)合起來(lái)。
原因#2:我希望抽象類中的代碼被覆蓋其后代的測(cè)試覆蓋。
如果您的設(shè)計(jì)是新興的“測(cè)試優(yōu)先”,那么您已經(jīng)涵蓋了此代碼,因?yàn)槌橄箢悓⑹悄鷮⑼ㄟ^重構(gòu)已經(jīng)在測(cè)試中的類引入到您的設(shè)計(jì)中的東西。
- 1 回答
- 0 關(guān)注
- 286 瀏覽
添加回答
舉報(bào)
0/150
提交
取消