2014-10-01 19 views
9

Birim testleri oluşturmak için Codeception \ Util \ Stub kullanıyorum. Ve yöntemimin birkaç kez çağrıldığından emin olmak istiyorum. Bunun için 'tam olarak' yöntemini kullanıyorum.Codeception Util Stub yöntemleri :: tam olarak ve :: bir kez çalışmaz

Örnek: Gördüğünüz gibi

use \UnitTester; 
use \Codeception\Util\Stub as StubUtil; 

class someCest 
{ 
    public function testMyTest(UnitTester $I) 
    { 
     $stub = StubUtil::makeEmpty('myClass', [ 
      'myMethod' => StubUtil::exactly(2, function() { return 'returnValue'; }) 
     ]); 
     $stub->myMethod(); 
    } 
} 

keresinde myMethod aradım. Ama test geçti. Yöntem ile aynı sorun :: bir kez, bu yöntem aynı sınıf PHPUnit_Framework_MockObject_Matcher_InvokedCount ('aşağıdaki' matcher ') kullanıyor çünkü. Test, yalnızca beklenenden daha fazla zaman arayacak olursam başarısız olur (> 2). Çünkü eşleştiricinin yöntemi "çağrıldı" ve daha sonra beklenen sayıyı kontrol eder. Ancak, birisinin beklediğimden daha kısa bir süre aradığında myMethod'un kontrol edilip edilmediğini kontrol etmek için bir kişinin eşleşme yöntemini 'doğrula' yöntemini arayacağını göremezsiniz.

Üzgünüm stackoverflow, bu benim ilk sorum.

GÜNCELLEME

Benim hızlı ve KÖTÜ geçici çözüm: yardımcı içine

$I->addStubToVerify($stub); 

Add yöntemi yardımcı içine

Ekleme saplama doğrulamak için:

protected $stubsToVerify = []; 
public function verifyStubs() 
{ 
    foreach ($this->stubsToVerify as $stub) { 
     $stub->__phpunit_getInvocationMocker()->verify(); 
    } 
    return $this; 
} 

Çağrısı bu yöntem Cest'in metodunda _after():

public function _after(UnitTester $I) 
{ 
    $I->verifyStubs(); 
} 

cevap

6

Sen makeEmpty üçüncü bir parametre olarak $this geçmesi gerekiyor:

$stub = StubUtil::makeEmpty('myClass', [ 
    'myMethod' => StubUtil::exactly(2, function() { return 'returnValue'; }) 
], $this); 
+2

Çözümün çalışmaz. yöntemi :: make() ve :: makeEmpty(), PHPUnit_Framework_TestCase olarak 3. parametreye sahiptir, Ama $ this someCest ve PHPUnit_Framework_TestCase'i genişletmiyor. – vatvit

İlgili konular