1

私の Zend Framework プロジェクトには、テスト中のフォームがあります。私のフォームでは、複数選択要素はモデルからオプションを取得し、データベースからそれらを取得します。

public function init()
{
    $this->addElement('select', 'Region_ID', array('multiOptions' => $this->getRegions()));
}

protected function getRegions()
{
    $mapper = new Model_RegionMapper();
    return $mapper->getFormSelectData(); //this method will try to connect to a database (or get another object that will connect to the database)
}

PHPUnit ドキュメントの例をコピーしてみましたが、うまくいかないようです。

public function setUp()
{
    $stub = $this->getMock('Model_RegionMapper');
    $stub->expects($this->any())
        ->method('getFormSelectData')
        ->will($this->returnValue(array('testdata')));
}

public function testFoo()
{
    //this will fail
    $form = new My_Form();
}

データベース内に存在しないテーブルを検索しようとしているため、テストは失敗します。しかし、データベースにまったく接続したくありません。データベースを呼び出さないように、このメソッドを正しくスタブ/モックするにはどうすればよいですか?

4

2 に答える 2

3

Model_RegionMapper をモックします。

  • クラスで Model_RegionMapper を構築しないでください。代わりに渡します。
  • テストするときは、getFormSelectData() のテスト データを返す偽の Model_RegionMapper を渡します。
于 2010-06-17T16:32:38.997 に答える