私は phpUnit を使用し、拡張してデータベースに関連するテストを作成しますPHPUnit_Extensions_Database_TestCase
。データベース障害をシミュレートしてエラー チェックをテストするにはどうすればよいですか? データベースがダウンしている以外に、どのような障害が発生する可能性がありますか?
この Ruby on Rails の質問を見つけましたが、phpUnit とは関係がないことがわかりました。
私は phpUnit を使用し、拡張してデータベースに関連するテストを作成しますPHPUnit_Extensions_Database_TestCase
。データベース障害をシミュレートしてエラー チェックをテストするにはどうすればよいですか? データベースがダウンしている以外に、どのような障害が発生する可能性がありますか?
この Ruby on Rails の質問を見つけましたが、phpUnit とは関係がないことがわかりました。
コード ブロックを分離し、PHPUnit で Mocks/Stubs を使用してデータベース呼び出しからの戻りを制御し、エラーを含めます。これにより、メイン コードがエラーを処理します。実際のデータベースは使用しませんが、例外またはコードが期待する方法でデータベース エラーを処理するための対話を行うコードをテストします。
コードからの同じリターンをモックでシミュレートするには、次のようにします。
$stub = $this->getMock('YourDBClass');
// Configure the stub to return an error when the RunQuery method is called
$stub->expects($this->any())
->method('RunQuery')
->will($this->throwException(new SpecificException));
@expectsExceptionのいずれかを使用してテストできます
/**
* @expectedException SpecificException
*/
public function testDBError()
{
$stub = $this->getMock('YourDBClass');
// Configure the stub to return an error when the RunQuery method is called
$stub->expects($this->any())
->method('RunQuery')
->will($this->throwException(new SpecificException));
$stub->RunQuery();
}
または setExpectedException を使用して
public function testDBError()
{
$stub = $this->getMock('YourDBClass');
// Configure the stub to return an error when the RunQuery method is called
$stub->expects($this->any())
->method('RunQuery')
->will($this->throwException(new SpecificException));
$this->setExpectedException('SpecificException');
$stub->RunQuery();
}
次に、既知のリターンを同じ方法でテストします
public function testDBQueryReturns1()
{
$stub = $this->getMock('YourDBClass');
// Configure the stub to return an error when the RunQuery method is called
$stub->expects($this->any())
->method('RunQuery')
->will($this->returnValue(1));
$this->assertEquals(1, $stub->RunQuery(), 'Testing for the proper return value');
}