firehed / mocktrine
PHPUnit Doctrine模拟工具
Requires
- php: ^7.4 || ^8.0
- doctrine/annotations: ^1.10 || ^2.0
- doctrine/collections: ^1.6.8 || ^2.0
- doctrine/orm: ^2.9
- doctrine/persistence: ^1.3 || ^2.0 || ^3.0
- symfony/polyfill-php80: ^1.20
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^9.3 || ^10
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-02 02:18:07 UTC
README
一个用于测试的Doctrine模拟库
用法
在需要实体管理器的单元测试中,使用new \Firehed\Mocktrine\InMemoryEntityManager
。完成!
任何带有Doctrine实体注解(如@Entity
、@Id
、@Column
等)的对象都应该无需修改即可工作。
此库旨在提供尽可能多的类型信息,以便静态分析工具(如PHPStan)无需额外插件即可正常工作。
映射支持
从版本0.5开始,此库可以与Doctrine支持的任何映射驱动程序一起使用。InMemoryEntityManager
接受驱动程序作为可选参数。
- $em = new Mocktrine\InMemoryEntityManager(); + $em = new Mocktrine\InMemoryEntityManager( + \Doctrine\ORM\Mapping\Driver\AttributeDriver(['src/Model']), + );
您还可以直接从Doctrine配置中获取值
$config = Setup::createAnnotationMetadataDriverConfiguration(...) $driver = $config->getMetadataDriverImpl(); $em = new Mocktrine\InMemoryEntityManager($driver)
如果没有提供驱动程序,则默认为SimpleAnnotationReader
或通过Setup::createAnnotationMetadataConfiguration
使用的AnnotationReader
。前者将被优先考虑,但该类已在doctrine/annotations:2.0
中被删除;如果您的本地依赖允许该版本,则后者将被使用。
建议始终明确提供驱动程序,因为这最符合Doctrine自身的设置行为。此库的将来版本可能会使此要求成为必需。
支持的功能
以下Doctrine的EntityManagerInterface
上的方法都应该按预期工作
- find
- persist
- remove
- merge
- flush
- getRepository
- getCache(将始终返回
null
) - isOpen(将始终返回
true
)
所有ObjectRepository
上的方法(用于各种findBy操作)也应按预期工作,以及非接口的count($criteria)
方法。ObjectRepository
还实现了Selectable
接口(与EntityRepository
一样,是EntityManager
返回的类型),因此还可以使用matching(Criteria)
方法。
以下方法目前不支持
- clear
- detach
- refresh
- getClassMetadata
- getMetadataFactory
- initializeObject
- contains
- getConnection
- getExpressionBuilder
- beginTransaction
- transactional
- commit
- rollback
- createQuery
- createNamedQuery
- createNativeQuery
- createNamedNativeQuery
- getReference
- getPartialReference
- close
- copy
- lock
- getEventManager
- getConfiguration
- getUnitOfWork
- getHydrator
- newHydrator
- getProxyFactory
- getFilters
- isFiltersStateClean
- hasFilters