Tanto quanto eu entendo, Factory
e as Proxy
classes são geradas em tempo real pelo carregador automático, se ainda não existirem var/generation
(veja: O que desencadeia a geração de uma fábrica no Magento 2 )
Mas por que recebo esse erro ao referenciar uma nova fábrica em um teste de unidade?
ReflectionException: A classe Magento \ Framework \ Api \ Search \ SearchCriteriaBuilderFactory não existe
[...] / vendor / 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);
}
}
Estou usando o arquivo de inicialização dev/tests/unit/framework/bootstrap.php
.
Soluções alternativas que encontrei para gerar a classe:
usando o gerenciador de objetos real (Obrigado @DigitalPianism):
\Magento\Framework\App\Bootstrap::create(BP, $_SERVER)->getObjectManager()->create('\Magento\Framework\Api\Search\SearchCriteriaBuilderFactory')
executar
setup:di:compile
(dado que a fábrica é referenciada em um construtor)
Mas ainda espero encontrar uma solução limpa e com bom desempenho.
Além disso, não tenho certeza se está relacionado, mas create()
a fábrica gerada a partir do gerenciador de objetos de teste da unidade retorna null
, então eu ainda não tenho uma fábrica funcionando.
\Magento\Framework\App\Bootstrap::create(BP, $_SERVER)->getObjectManager()->create('\Magento\Framework\Api\Search\SearchCriteriaBuilderFactory');
?
getObject
você ligar getBuilder
? Isso deve acontecer diretamente via, getObject
mas apenas para testar.
Magento\Framework\Api\Search\SearchCriteriaBuilder
?