2013-04-16 35 views
6

Tôi đang cố gắng để có được Mockery để khẳng định rằng một phương pháp nhất định được gọi là ít nhất một lần.Mockery shouldReceive() -> once() dường như không hoạt động

lớp thử nghiệm của tôi là:

use \Mockery as m; 

class MyTest extends \PHPUnit_Framework_TestCase 
{ 

    public function testSetUriIsCalled() 
    { 
     $uri = 'http://localhost'; 
     $httpClient = m::mock('Zend\Http\Client'); 
     $httpClient->shouldReceive('setUri')->with($uri)->atLeast()->once(); 
    } 

} 

Như bạn thấy, có một bài kiểm tra đó (hy vọng) tạo ra một kỳ vọng rằng setUri sẽ được gọi. Vì không có bất kỳ mã nào khác có liên quan, tôi không thể tưởng tượng rằng nó có thể được gọi là nhưng chưa được kiểm tra. Bất cứ ai có thể giải thích lý do tại sao?

Trả lời

38

Bạn cần gọi số Mockery:close() để chạy xác minh cho kỳ vọng của mình. Nó cũng xử lý việc dọn dẹp container giả cho testcase tiếp theo.

public function tearDown() 
{ 
    parent::tearDown(); 
    m::close(); 
} 
2

Để tránh phải gọi phương thức chặt chẽ trong mỗi lớp kiểm tra, bạn chỉ có thể thêm TestListener để cấu hình phpunit bạn như vậy:

<listeners> 
    <listener class="\Mockery\Adapter\Phpunit\TestListener"></listener> 
</listeners> 

Cách tiếp cận này được giải thích trong docs.

Một điều cần lưu ý từ các tài liệu liên quan là:

Hãy chắc chắn rằng Composer hay autoloader mockery của hiện diện trong file bootstrap hoặc bạn sẽ cũng cần phải xác định một “tập tin” thuộc tính trỏ đến tập tin của TestListener trên lớp học.

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