Soweit ich verstehe, Factory
und Proxy
Klassen werden im laufenden Betrieb durch den Autoloader erzeugt , wenn sie nicht existieren noch in var/generation
(siehe: Was die Erzeugung einer Fabrik in Magento Trigger 2 )
Aber warum erhalte ich diesen Fehler, wenn ich in einem Komponententest auf eine neue Fabrik verweise?
ReflectionException: Die Klasse Magento \ Framework \ Api \ Search \ SearchCriteriaBuilderFactory ist nicht vorhanden
[...] / 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);
}
}
Ich benutze die Bootstrap-Datei dev/tests/unit/framework/bootstrap.php
.
Problemumgehungen Ich habe festgestellt, dass die Klasse generiert wird:
Verwenden des Real Object Managers (Danke @DigitalPianism):
\Magento\Framework\App\Bootstrap::create(BP, $_SERVER)->getObjectManager()->create('\Magento\Framework\Api\Search\SearchCriteriaBuilderFactory')
run
setup:di:compile
(vorausgesetzt, die Factory wird in einem Konstruktor referenziert)
Aber ich hoffe immer noch, eine saubere und performante Lösung zu finden.
Ich bin mir auch nicht sicher, ob es verwandt ist, aber create()
die vom Unit Test Object Manager generierte Factory kehrt zurück null
, sodass ich noch nicht einmal eine funktionierende Factory habe.
\Magento\Framework\App\Bootstrap::create(BP, $_SERVER)->getObjectManager()->create('\Magento\Framework\Api\Search\SearchCriteriaBuilderFactory');
?
getObject
Sie nicht anrufen getBuilder
? Das sollte direkt über getObject
aber nur zum Testen geschehen .
Magento\Framework\Api\Search\SearchCriteriaBuilder
?