Tôi đã tìm hiểu về kiểm tra đơn vị và tôi đã cố gắng để giải quyết vấn đề sau:ZF2 authentication đơn vị thử nghiệm
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for zfcUserAuthentication
... bằng cách sử dụng câu trả lời duy nhất cho tại địa chỉ:
Simple ZF2 Unit Tests for a controller using ZfcUser
Vì vậy, chức năng thiết lập của tôi trông giống nhau. Thật không may, tôi nhận được thông báo lỗi:
Zend\Mvc\Exception\InvalidPluginException: Plugin of type Mock_ZfcUserAuthentication_868bf824 is invalid; must implement Zend\Mvc\Controller\Plugin\PluginInterface
Nó được gây ra tại khu vực này của mã (chia tay trong mã của tôi theo cách tương tự):
$this -> controller->getPluginManager()
->setService('zfcUserAuthentication', $authMock); // Error refers to this line.
Các $ authMock đối tượng là rõ ràng không triển khai thực hiện plugininterface, mà tôi cần thực hiện để chuyển sang setService.
Có phải $ authMock không có nghĩa là được chuyển đến đó để sử dụng trong thử nghiệm đơn vị không? Tôi có nên sử dụng phương pháp setService khác (đơn vị thử nghiệm theo định hướng) không?
Tôi cần một cách để xử lý đăng nhập vào ứng dụng của mình hoặc thử nghiệm đơn vị của tôi là vô nghĩa.
Cảm ơn lời khuyên nào.
=== Sửa (2013/11/02) ===
tôi muốn tập trung vào phần này để làm rõ, như tôi nghĩ rằng đây là khu vực có vấn đề:
// Getting mock of authentication object, which is used as a plugin.
$authMock = $this->getMock('ZfcUser\Controller\Plugin\ZfcUserAuthentication');
// Some expectations of the authentication service.
$authMock -> expects($this->any())
-> method('hasIdentity')
-> will($this->returnValue(true));
$authMock -> expects($this->any())
-> method('getIdentity')
-> will($this->returnValue($ZfcUserMock));
// At this point, PluginManager disallows mock being assigned as plugin because
// it will not implement plugin interface, as mentioned.
$this -> controller->getPluginManager()
->setService('zfcUserAuthentication', $authMock);
Nếu giả lập không xử lý các triển khai cần thiết, làm cách nào khác để tôi giả vờ đăng nhập?
Tôi có đúng không khi cần kiểm tra đơn vị vì đây là mô hình? Tôi thấy đó là nơi tôi giữ tất cả mã xác thực của mình. – Shoreline
Tôi đã làm một cái gì đó tương tự gần đây mà không có vấn đề gì. Lớp học testcase hoàn chỉnh của bạn trông như thế nào? Ngoài ra bootstrap thử nghiệm của bạn trông như thế nào? Và cuối cùng là hành động mà bạn đang cố gắng thử nghiệm. – Ruben
Bạn có sử dụng cấu hình ứng dụng đặc biệt khi kiểm tra đơn vị không? Có thể trong trường hợp đó mô-đun zfcUser không được nạp trong môi trường thử nghiệm. – SmasherHell