2016-04-14 21 views
0

Hata kaydedicimizin çeşitli senaryolarda nasıl çalıştığını test etmem gerekiyor. Böyle bir senaryo ayrıştırma hatalarıdır. İşte bir örnek:phpunit ile PHP ayrıştırma hatalarını test etme

public function testParseErrorLogsAnError() 
{ 
    $this->assertCount(0, $this->log_handler->getRecords()); 

    try { 
     eval('<?php not good'); 
     $this->fail('Code above should throw a parse error'); 
    } catch (\Exception $e) { 
     $this->assertInstanceOf(\ParseError::class, $e); 
    } 

    $this->assertCount(1, $this->log_handler->getRecords()); 
} 

Sorun PHPUnit daima bir istisna ile var olduğunu ve asla catch blok girer. Phpunit istisnası işleyicisi nasıl devre dışı bırakılır veya devredilir, böylece kendi testlerimizi yapabiliriz?

+0

bir PHP7 özelliği taşımaktadır:

catch (\ParseError $e) { ... catch (\Error $e) { ... catch (\Throwable $e) { ... 
Alternatif

, zaten @DevDonkey önerdiği @expectedException açıklama als kullanmak eval. PHP7 kullanıyor musunuz? –

+0

Evet, PHP7 kullanıyoruz. – Ilija

cevap

2

Bu yanıt için, PHP 7'yi kullandığınızı farz ediyorum. PHP 5'te, Parse Hataları yakalanamaz ve PHP işleminizi her zaman sonlandırır.

PHP 7'de, catch (diğer cevabı ne diyor aksine) bir deneme/yakalama deyimini kullanarak Hataları Ayrıştırma edebilirsiniz. Ancak, PHP 7'nin ParseError sınıfı, Exception sınıfını değil Error sınıfını genişletir (ayrıca bkz. documentation). Yani catch (\Exception $e) işe yaramaz, ancak bunlardan herhangi yapmalıdır:

/** 
* @expectedException ParseError 
*/ 
public function testParseErrorLogsAnError() 
{ 
    eval('<?php not good'); 
} 
bir istisna atılan