私が理解している限りFactory
、Proxy
クラスがまだ存在しない場合、クラスはオートローダーによってオンザフライで生成されますvar/generation
(参照:Magento 2でのファクトリーの生成をトリガーするもの)
しかし、ユニットテストで新しいファクトリを参照するときにこのエラーが発生するのはなぜですか?
ReflectionException:クラスMagento \ Framework \ Api \ Search \ SearchCriteriaBuilderFactoryは存在しません
[...] / 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);
}
}
ブートストラップファイルを使用していますdev/tests/unit/framework/bootstrap.php
。
クラスを生成するために見つけた回避策:
実際のオブジェクトマネージャーを使用(ありがとう@DigitalPianism):
\Magento\Framework\App\Bootstrap::create(BP, $_SERVER)->getObjectManager()->create('\Magento\Framework\Api\Search\SearchCriteriaBuilderFactory')
実行
setup:di:compile
(ファクトリーがコンストラクターで参照される場合)
しかし、私はまだクリーンでパフォーマンスの高いソリューションを見つけたいと思っています。
また、関連しているかどうかはわかりませんがcreate()
、単体テストのオブジェクトマネージャーから生成されたファクトリーはを返しますnull
。そのため、稼働中のファクトリーもまだありません。
\Magento\Framework\App\Bootstrap::create(BP, $_SERVER)->getObjectManager()->create('\Magento\Framework\Api\Search\SearchCriteriaBuilderFactory');
か?
getObject
電話したらどうなりますgetBuilder
か?これはgetObject
、テストのためだけに直接実行する必要があります。
Magento\Framework\Api\Search\SearchCriteriaBuilder
ますか?