https://github.com/firehed/mocktrine
Mock Doctrine more easily
https://github.com/firehed/mocktrine
Last synced: about 1 year ago
JSON representation
Mock Doctrine more easily
- Host: GitHub
- URL: https://github.com/firehed/mocktrine
- Owner: Firehed
- Created: 2015-10-08T00:46:22.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2024-11-15T02:59:09.000Z (over 1 year ago)
- Last Synced: 2025-04-08T08:50:10.309Z (about 1 year ago)
- Language: PHP
- Size: 120 KB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Mocktrine
A Doctrine mocking library for testing
[](//packagist.org/packages/firehed/mocktrine)
[](//packagist.org/packages/firehed/mocktrine)
[](https://github.com/Firehed/mocktrine/actions?query=workflow%3ATest)
[](https://github.com/Firehed/mocktrine/actions?query=workflow%3A%22Static+analysis%22)
[](https://github.com/Firehed/mocktrine/actions?query=workflow%3ALint)
## Usage
In your unit tests that need an Entity Manager, use a `new \Firehed\Mocktrine\InMemoryEntityManager`. Done!
Any object with Doctrine's entity annotations (`@Entity`, `@Id`, `@Column`, etc) should work without modification.
This library aims to provide as much type information as possible, so that static analysis tools (such as PHPStan) work well without additional plugins.
### Mapping support
As of version 0.5, any mapping driver supported by Doctrine can be used with this library.
The `InMemoryEntityManager` accepts the driver as an optional parameter.
```diff
- $em = new Mocktrine\InMemoryEntityManager();
+ $em = new Mocktrine\InMemoryEntityManager(
+ \Doctrine\ORM\Mapping\Driver\AttributeDriver(['src/Model']),
+ );
```
You can also grab the value directly from your Doctrine config:
```php
$config = Setup::createAnnotationMetadataDriverConfiguration(...)
$driver = $config->getMetadataDriverImpl();
$em = new Mocktrine\InMemoryEntityManager($driver)
```
If a driver is not provided, it will default to either `SimpleAnnotationReader` or `AnnotationReader` that's used via `Setup::createAnnotationMetadataConfiguration`.
The former will be preferred, but the class has been removed in `doctrine/annotations:2.0`; if your local dependencies allow that version then the latter will be used.
It is RECOMMENDED to always explicitly provide a driver, as that best matches Doctrine's own setup behavior.
Future versions of this library may make this required.
## Supported features
The following methods on Doctrine's `EntityManagerInterface` should all work as expected:
- find
- persist
- remove
- merge
- flush
- getRepository
- getCache (will always return `null`)
- isOpen (will always return `true`)
All methods on the `ObjectRepository` (for various findBy operations) should also work, as well as the non-interface `count($criteria)` method.
`ObjectRepository` also implements the `Selectable` interface (as `EntityRepository` does, which is the returned type from `EntityManager`), so it's also possible to use the `matching(Criteria)` method.
The following methods are **not** supported at this time:
- 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