https://github.com/metamodels/phpunit-contao-database
Small set of classes to allow to test MetaModels against a fake Contao database.
https://github.com/metamodels/phpunit-contao-database
Last synced: 4 months ago
JSON representation
Small set of classes to allow to test MetaModels against a fake Contao database.
- Host: GitHub
- URL: https://github.com/metamodels/phpunit-contao-database
- Owner: MetaModels
- License: lgpl-3.0
- Created: 2014-11-11T03:35:44.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2016-07-20T11:52:18.000Z (over 9 years ago)
- Last Synced: 2025-08-27T22:09:36.080Z (6 months ago)
- Language: PHP
- Size: 44.9 KB
- Stars: 2
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
MetaModels database objects for phpunit
=======================================
What you can expect here.
-------------------------
This repository holds a small subset of classes that can be used to fake a Contao database connection.
To do so, you define the queries and their result sets.
Installation
------------
Add `"metamodels/phpunit-contao-database": "~1.0"` to your `composer.json` in the `require-dev` section and you are set.
How to use it.
--------------
In your unit test you simply replace the original Contao database classes by calling the following code (before the
original Contao database classes get loaded via autoloading!). A good place might be the `setUp()`-method of your test
case.
```php
class MyTest extends \PHPUnit_Framework_TestCase
{
/**
* Register the database.
*
* @return void
*/
public function setUp()
{
\MetaModels\Test\Contao\Database::register();
}
}
```
Using it in unit tests
----------------------
You should use dependency injection for proper unit testing, then you can use something like this:
```php
$objectToTest = new ClassToTest();
$database = \MetaModels\Test\Contao\Database::getNewTestInstance();
// Inject the database into the instance.
$objectToTest->setDatabase($database);
$database
->getQueryCollection()
->theQuery('SELECT * FROM test WHERE id=?')
->with(1)
->result()
->addRow(
array(
'id' => 1,
'tstamp' => 343094400,
'title' => 'test'
),
);
// This method will call the above query internally and will receive the given result.
$result = $objectToTest->testMethod();
$this->assertEquals(1, $result->getId());
$this->assertEquals(343094400, $result->getModificationTime());
$this->assertEquals('test', $result->getTitle());
```
If you should be in the unfortunate position that you can not use dependency injection, as the underlying code is using
```Database::getInstance()```, you are not out of luck. You can use the method
```$database = \MetaModels\Test\Contao\Database::getNewTestInstance();``` which will return the "default" database
instance then.
However using this approach is not suggested as the instance will be shared over all unit tests.