firehed/mocktrine

PHPUnit Doctrine模拟工具

0.7.0 2024-01-30 03:28 UTC

README

一个用于测试的Doctrine模拟库

Latest Stable Version License Test Static analysis Lint

用法

在需要实体管理器的单元测试中,使用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