2010-01-31 29 views
17

tôi tạo ra các giao diện sau:Tạo đối tượng Mock của giao diện với kiểu gợi ý trong phương pháp không thành công trên PHPUnit

<?php 
interface Action 
{ 
    public function execute(\requests\Request $request, array $params); 
} 

Sau đó, tôi cố gắng làm cho một đối tượng Mock của giao diện này với PHPUnit 3.4, nhưng tôi nhận được như sau lỗi:

Lỗi nghiêm trọng: Khai báo Mock_Action_b389c0b1 :: execute() phải tương thích với Action :: execute() trong D: \ Xampp \ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestCase.php (1121): mã eval() 'd trên dòng 2

Tôi đã xem qua dấu vết ngăn xếp mà tôi nhận được từ PHPU nit và thấy rằng nó tạo ra một đối tượng Mock mà thực hiện các hành động giao diện, nhưng tạo ra các phương thức execute theo cách sau:

<?php 
public function execute($request, array $params) 

Như bạn thấy, PHPUnit tiếp quản mảng kiểu gợi ý, nhưng quên về \ yêu cầu \ Yêu cầu. Điều này rõ ràng dẫn đến lỗi. Có ai biết một workaround cho lỗi này?

Tôi cũng đã thử không có không gian tên nhưng tôi vẫn gặp lỗi tương tự.

+2

Đánh dấu, bạn tạo mô hình bằng cách nào? –

Trả lời

23

Có lẽ hơi muộn.

Tôi gặp vấn đề tương tự chính xác này và hóa ra loại gợi ý không được tải và không thể tải được. Kết quả là, ReflectionParameter của PHP không trả về tên lớp và trình tạo mô phỏng PHPUnit không bao gồm nó.

Nếu bạn đảm bảo loại được gợi ý là được tải hoặc có thể tải bằng tính năng tự động tải, nó sẽ hoạt động.

+0

Không bao giờ quá muộn: điều này đã giúp tôi vô cùng 6 năm sau đó. Vấn đề của tôi là không gian tên không phù hợp với cấu trúc thư mục sau khi một trình tái cấu trúc cẩu thả, vì vậy nó không thể tải được dưới PSR4. Một vấn đề mơ hồ của nó như là người xây dựng giả lập không cảnh báo chút nào, chỉ cần tạo ra một lớp ngẫu nhiên! Tôi đã chẩn đoán nó bằng cách cố gắng tạo ra một lớp con gái giả thủ thay vào đó và tất nhiên là đã xuất hiện vấn đề về không gian tên khá nhanh chóng. – scipilot

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