1

単体テストしようとしているコードは次のとおりです。

public function getDao () {
    $dao = '';

    if (isset($this->_dao)) {
        $dao = $this->_dao;
    } else {
        $dao = new $this->_daoClassName; 
    }

    return $dao;
}

クラスは抽象クラスであり$_daoClassName、保護された変数です。各具象クラスは値を設定します$_daoClassName

このコードを単体テストするにはどうすればよいですか? PHPUnit の $this->getMockForAbstractClass() を使用しようとしていますが、保護されたメソッドをオーバーライドできるとは思いません。あるいは、この getDao() メソッドで使用すべきより良いパターンはありますか?

4

1 に答える 1

1

次のような関数を強くお勧めします。

abstract protected function getDaoClassName();

サブクラスで実装する必要があります。( によって強制abstract)

次に、関数が特定の値を返すようにモックを構成できます。

$stub = $this->getMockForAbstractClass('YourClass');
$stub->expects($this->any())
     ->method('getDaoClassName')
     ->will($this->returnValue('SomeDaoClass'));

次に、メソッドをテストします。

$dao = $stub->getDao();
$this->assertEquals('SomeDaoClass', get_class($dao));
于 2013-07-06T13:41:10.727 に答える