hazırladı. Ben anlamda, kolay mapper sınıfta enjekte edilecek PDO örneğinin alay edebilir, ama PDO sınıfı tarafından Oluşturulan olarak, PreparedStatement sınıf alay anlamaya olamaz. Benim durumumdaPHPUnit - alay Nasıl PDO ben PHPUnit ile bir haritacı sınıfını test etmek birimine çalışıyorum deyimi
ben PDO sınıfını uzattığımızı, bu yüzden bu var:
public function __construct($dsn, $user, $pass, $driverOptions)
{
//...
parent::__construct($dsn, $user, $pass, $driverOptions);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('Core_Db_Driver_PDOStatement', array($this)));
}
noktası Core_Db_Driver_PDOStatement PDO Class yapıcısı enjekte olmadığını, bu statik instanciated oluyor. Ve bunu da olsa:
public function __construct($dsn, $user, $pass, $driverOptions, $stmtClass = 'Core_Db_Driver_PDOStatement')
{
//...
parent::__construct($dsn, $user, $pass, $driverOptions);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array($stmtClass, array($this)));
}
... ben Hazırlanan deyimi sınıfının kendi alay örneğini geçemez gibi statik instanciation hâlâ burada.
Herhangi bir fikrin var mı?
Düzenleme: Çözüm, anwser uyarlanmıştır:
/**
* @codeCoverageIgnore
*/
private function getDbStub($result)
{
$STMTstub = $this->getMock('PDOStatement');
$STMTstub->expects($this->any())
->method('fetchAll')
->will($this->returnValue($result));
$PDOstub = $this->getMock('mockPDO');
$PDOstub->expects($this->any())
->method('prepare')
->will($this->returnValue($STMTstub));
return $PDOstub;
}
public function testGetFooById()
{
$arrResult = array(...);
$PDOstub = $this->getDbStub($arrResult);
}
Kesinlikle, ben de iyi anlaşılmamış vermedi parçasını buldunuz. Benim uyarlanmış çözümüme yer vermek için sorumu düzenledim. Teşekkürler ! – FMaz008
Bu yaklaşımdaki sorun, uygulama kodu uygulamasını teste tabi tutmasıdır. Test, uygulamanın çağırılıp çağrılmadığını bilmeli -> fetch() veya fetchAll()? Bir şey değil! Kod fetchaAll() yerine fetch() kullanılacak şekilde uyarlanmışsa, yöntem yine de doğru şekilde çalışmayabilir, ancak sınama başarısız olur. –
@TomB, bu sadece bu cevapla değil, alay bağımlılıkları ile ilgili genel bir sorundur. – PeerBr