2011-09-15 28 views
33

Khi tạo một mô hình mới, tôi cần gọi phương thức mong đợi. Chính xác thì nó là gì? Điều gì về các đối số của nó?PHPUnit: mong đợi ý nghĩa của phương thức

$todoListMock = $this->getMock('\Model\Todo_List'); 
     $todoListMock->expects($this->any()) 
      ->method('getItems') 
      ->will($this->returnValue(array($itemMock))); 

Tôi không thể tìm thấy lý do ở bất cứ đâu (tôi đã thử tài liệu). Tôi đã đọc các nguồn nhưng tôi không thể hiểu được. Cảm ơn.

Trả lời

37

hy vọng() - Bộ bao nhiêu lần bạn mong đợi một phương pháp được gọi là:

$mock = $this->getMock('nameOfTheClass', array('firstMethod','secondMethod','thirdMethod')); 
$mock->expects($this->once()) 
    ->method('firstMethod') 
    ->will($this->returnValue('value')); 
$mock->expects($this->once()) 
    ->method('secondMethod') 
    ->will($this->returnValue('value')); 
$mock->expects($this->once()) 
    ->method('thirdMethod') 
    ->will($this->returnValue('value')); 

Nếu bạn đã biết, phương pháp đó được gọi là một lần sử dụng $ this- > once() trong kỳ vọng(), nếu không, hãy sử dụng $ this-> any()

xem:
PHPUnit mock with multiple expects() calls

https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.stubs

http://www.slideshare.net/mjlivelyjr/advanced-phpunit-testing

+1

Điều gì sẽ xảy ra nếu nó được gọi một lần, và sau đó, được gọi lại? – thom

+0

nếu phương pháp dự kiến ​​sẽ được gọi một lần sẽ được gọi nhiều lần hơn, kiểm tra có thể sẽ thất bại –

+12

không chỉ * có thể *, nhưng * chắc chắn *;) – Gordon

41

Một nhìn vào mã nguồn sẽ cho bạn biết:

/** 
* Registers a new expectation in the mock object and returns the match 
* object which can be infused with further details. 
* 
* @param PHPUnit_Framework_MockObject_Matcher_Invocation $matcher 
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker 
*/ 
public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher); 

Và Manual PHPUnit liệt kê các quẹt sẵn tại

  • bất kỳ () trả về một đối sánh khớp với khi phương thức được đánh giá được thực hiện bằng không hoặc nhiều lần.
  • không bao giờ() trả về đối sánh khớp với khi phương pháp được đánh giá không bao giờ được thực thi.
  • atLeastOnce() trả về đối sánh khớp với khi phương pháp được đánh giá được thực hiện ít nhất một lần.
  • một lần() trả về một đối sánh khớp với khi phương pháp được đánh giá được thực thi chính xác một lần.
  • chính xác (số lượng int) trả về một đối sánh khớp với khi phương pháp được đánh giá được thực thi chính xác $ lần.
  • tại (int $ index) trả về một đối sánh khớp với khi phương thức được đánh giá được gọi tại chỉ mục $ đã cho.
+1

Lưu ý rằng tại() bắt đầu từ 0. Tôi thấy rằng ra cách cứng thông qua một số thử và sai ngày hôm nay. – PressingOnAlways

+3

Cũng lưu ý rằng 'at()' sử dụng cùng một bộ đếm cho phương thức ALL stubbed trên đối tượng giả của bạn. Nó KHÔNG gán một bộ đếm mới cho mỗi phương thức. – ankr

Các vấn đề liên quan