adlı bir ispat yöntemi, phpunit için yeni ve sahte nesnelerle ilgili belgeleri okudum ama çok açık değil.PHPUnit alayları -
Bir sınıf içinde bir yöntem denen basit bir sınama yazmaya çalışıyorum. Aşağıdaki kodla, Client :: exchangeArray çağrıldığında, Client :: getInputFilter öğesine bir çağrı yapıldığını test ediyorum. İşte
class Client implements InputFilterAwareInterface
{
public function getInputFilter() {
if(!$this->_inputFilter){
$inputFactory = new InputFactory();
$inputFilter = new InputFilter();
$inputFilter->add($inputFactory->createInput(array(
'name' => 'id',
'required' => true,
'filters' => array(
array(
'name' => 'Int'
)
)
)));
$inputFilter->add($inputFactory->createInput(array(
'name' => 'name',
'required' => true,
'filters' => array(
array(
'name' => 'StripTags'
),
array(
'name' => 'StringTrim'
),
array(
'name' => 'StripNewLines'
),
array(
'name' => 'Alpha'
)
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 2,
'max' => 100
)
)
)
)));
$inputFilter->add($inputFactory->createInput(array(
'name' => 'surname',
'required' => true,
'filters' => array(
array(
'name' => 'StripTags'
),
array(
'name' => 'StringTrim'
)
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 2,
'max' => 100
)
)
)
)));
$inputFilter->add($inputFactory->createInput(array(
'name' => 'email',
'required' => false,
'filters' => array(
array(
'name' => 'StripTags'
),
array(
'name' => 'StringTrim'
)
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 2,
'max' => 150
)
),
array(
'name' => 'EmailAddress'
)
)
)));
$this->_inputFilter = $inputFilter;
}
return $this->_inputFilter;
}
public function exchangeArray($data){
$inputFilter = $this->getInputFilter();
$inputFilter->setData($data);
if(!$inputFilter->isValid()){
throw new \Exception('Invalid client data');
}
$cleanValues = $inputFilter->getValues();
$this->_id = (isset($cleanValues['id']) ? $cleanValues['id'] : null);
$this->_name = (isset($cleanValues['name']) ? $cleanValues['name'] : null);
$this->_surname = (isset($cleanValues['surname']) ? $cleanValues['surname'] : null);
$this->_email = (isset($cleanValues['email']) ? $cleanValues['email'] : null);
}
}
benim test durumdur:
public function testExchangeArrayCallsInputFilter(){
$data = array('id' => 54,
'name' => 'john',
'surname' => 'doe',
'email' => '[email protected]'
);
$mock = $this->getMock('Client', array('exchangeArray'));
$mock->expects($this->once())
->method('getInputFilter');
$mock->exchangeArray($data);
}
... ve ben aşağıdaki hatayı alıyorum: ben yanlış gidiyorum
Expectation failed for method name is equal to when invoked 1 time(s). Method was expected to be called 1 times, actually called 0 times.
?
Cevabınız için teşekkür ederiz. Her iki yöntem için zaten uygulamalarım var. Sadece yöntemlerin doğru sırayla çağrıldığını kontrol etmek istedim ve daha sonra belirli parametrelerle çağrıldıklarını. Yöntemlerin sahte nesneler olmadan çağrıldığını kontrol etmenin bir yolu var mı? –
Hayır, yok. Ama eğer ikinci yöntemi çağırmak istiyorsanız, aslında çağrılmış olup olmadığını kontrol etmeniz gerekmez, çünkü eğer o değilse, $ inputFilter nesnesini alamazsınız ve yine de başarısızlığı test edebilirsiniz. – Cyprian
Diğer taraftan, test geçme ve ikinci yöntem çağrılmadıysa (sizin durumunuzda gerçekleşmeyecek, ancak bazı durumlarda olabilir) kod kapsamı raporunda bunu farkedeceksiniz. Ve bu, ya bu ikinci aramaya ihtiyacınız olmadığını ya da testlerinizi düzelttiğiniz anlamına gelebilir. İkinci yönteminizin bazı iç nesne özellikleri belirlemesi durumunda, yöntemin çağrılıp çağrılmadığını kontrol etmek için bu özelliğe karşı da test edebilirsiniz. – Cyprian