2013-06-05 17 views
6

PHPUnit kullanarak bir sahtekarlığa bir sınıf sabit eklemek mümkün mü? İşte bir örnek PHPUnit'teki bir alay için sabit ekleyin

:

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
     // Here I'd like to add a constant to $mock; something like 
     // $mock::FOOBAR; 
    } 
} 

Aranızda bu behavious işe nasıl biliyor mu?

Thx!

+0

Yansıma sınıfı ne istediğinizi başarır mı? http://php.net/manual/en/book.reflection.php –

cevap

2

Bu soru bir süreliğine cevapsızdı, ama aynı sorunla karşılaştım. Bu mümkün görünmüyor; Eğer alay işlevsellik için alay nesnesi kullanabilirsiniz,

<?php 

class SomeClass { 
    const FOOBAR = 'foobar'; 
} 

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
    } 
} 

// tests 

?> 

Sonra test dosyasında

, ve ilk başta olurdu sabit aynı şekilde sınıfını kullanın: ancak, orada en az bir kirli iş çevresinde var . Örneğin:

// Call a method on mocked object 
// (would need to add this method to your mock, of course) 
$mock->doSomething(); 
// Use the constant 
$fooBar = SomeClass::FOOBAR; 

Bu kirli, bu yüzden gerçek SomeClass sınıf yüklenmeye çalışıyor autoloading çeşit kullanıyorsanız emin işler çok berbat alabilir, ama bu "iyi" çalışacak Orijinal SomeClass yüklenmiyorsa.

Diğer çözümlerin yanı sıra bunun gerçekten ne kadar kirli olduğuna dair bazı geri bildirimler almakla kesinlikle ilgileniyorum.

+0

Muhtemelen 'SomeClass' gibi ilan edilmelidir ** 'class SomeClassMock, bu yaklaşımın gerektirdiği şekilde çalışması için SomeClass' **' ı genişletir ve 'SomeClass' kendisi özünde 'final' olmamalıdır. –