2. What’s that?
Unit testing = testing bunches of code, not the whole
application
PhpUnit was created by Sebastian Bergamann
It’s part of xUnit family – most used unit testers
Used for automatic tests – makes the machine do the
work
3. What are the benefits
of unit testing?
Uncover bugs easier – good tests go trough all possible
program paths
Assure high code coverage – measurable code quality
indicator
Faster than manual testing
Suitable for teamwork
4. Installing PhpUnit
With PEAR:
pear config-set auto_discover 1
pear install phpunit/PHPUnit
With composer (dependency manager for php); just
add to composer.json:
{ "require-dev": { "phpunit/phpunit": "3.7.*" } }
and update the composer
7. Assertions
Helper functions that compare an expected result with
-
the actual one:
assertEquals()
assertFalse()
assertArrayHasKey()
assertInstanceOf()
assertNotNull()
assertRegExp()
etc.
8. Dependency injection
DI is a software pattern that allows the removal of
hard-coded dependencies
Highly coupled dependencies – bad
Loose coupled dependencies - awesome
Improves code readability, reusability
9. DI guidelines
Don’t use ‘new’
Pass dependencies as method parameters
DI allows real unit testing, by separating modules
Read the DI best practices
13. Annotations
These syntactic metadata are used for specifying
-
some special case behaviors
@covers
@test
@dataProvider
@expectedException
@group
etc.
14. Data Provider
Allows to bunch up more test cases into one, thus
reducing code duplicity
16. setUp & tearDown
setUp(), tearDown() – executed once for each test method
setUpBeforeClass(), tearDownAfterClass() - called before the first
test of the test case and after the last test
17. DB testing
Need extension: pear install phpunit/DbUnit
Supported dbs: mysql, postgre, oracle, sqlite
There are 4 stages of db testing:
- set up fixture
- exercise SUT
- verify outcome
- teardown
Important methods:
- getConnection() - connection data (host,db,pass)
- getDataSet() – defines state of DB before each test
18. DB testing
Once setting up the ‘fake’ db connection tests can be
executed to check queries
The db changes that occur during the tests don’t persist
Can verify number of rows after insertion, check query
results, etc.
This is the safest way of fully testing an application
(versus mocking db connection)