Tanto quanto eu entendo, Factorye as Proxyclasses 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');?
getObjectvocê ligar getBuilder? Isso deve acontecer diretamente via, getObjectmas apenas para testar.
Magento\Framework\Api\Search\SearchCriteriaBuilder?