Theo như tôi hiểu, Factory
và Proxy
các lớp được tạo ra bởi trình tải tự động nếu chúng chưa tồn tại var/generation
(xem: Điều gì kích hoạt thế hệ của một nhà máy trong Magento 2 )
Nhưng tại sao tôi lại gặp lỗi này khi tham khảo một nhà máy mới trong một bài kiểm tra đơn vị?
ReflectionException: Class Magento \ Framework \ Api \ Search \ SearchCriteriaBuilderFactory không tồn tại
[...] / nhà cung cấp / magento / framework / TestFramework / Unit / Helper / ObjectManager.php: 161
use Magento\Framework\Api\Search\SearchCriteriaBuilderFactory;
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
class SearchCriteriaTest extends \PHPUnit_Framework_TestCase
{
public function testFactoryGeneration()
{
$searchCriteriaBuilderFactory = (new ObjectManager($this))->getObject(SearchCriteriaBuilderFactory::class);
}
}
Tôi đang sử dụng tập tin bootstrap dev/tests/unit/framework/bootstrap.php
.
Cách giải quyết tôi tìm thấy để tạo lớp:
sử dụng trình quản lý đối tượng thực (Cảm ơn @DigitalPianism):
\Magento\Framework\App\Bootstrap::create(BP, $_SERVER)->getObjectManager()->create('\Magento\Framework\Api\Search\SearchCriteriaBuilderFactory')
chạy
setup:di:compile
(cho nhà máy được tham chiếu trong một hàm tạo)
Nhưng tôi vẫn hy vọng tìm được một giải pháp sạch sẽ và hiệu quả.
Ngoài ra, không chắc có liên quan hay không, nhưng create()
của nhà máy được tạo từ trình quản lý đối tượng thử nghiệm đơn vị trả về null
, vì vậy tôi thậm chí còn chưa có nhà máy hoạt động.
\Magento\Framework\App\Bootstrap::create(BP, $_SERVER)->getObjectManager()->create('\Magento\Framework\Api\Search\SearchCriteriaBuilderFactory');
thì sao?
getObject
bạn gọi getBuilder
thì sao? Điều đó sẽ xảy ra trực tiếp thông qua getObject
nhưng chỉ để kiểm tra.
Magento\Framework\Api\Search\SearchCriteriaBuilder
?