The document discusses unit testing and PHPUnit. It introduces unit testing concepts and methods like unit, integration, and regression tests. It provides an overview of PHPUnit functionality for writing and running tests. Advanced scenarios covered include custom testing environments, testing a WebDAV server, and challenges of testing parsers. The presentation encourages the use of unit testing to improve code quality.
1 of 47
Downloaded 51 times
More Related Content
Unit-Tests
1. Unit-Tests
Schnell und einfach selbst gemacht
TobiasSchlitt <toby@php.net>
PHP World Kongress 2009
2009-11-24
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 1 / 25
2. About me
Tobias Schlitt <toby@php.net>
PHP since 2001
Freelancing consultant
Quali鍖ed IT Specialist
Studying CS at TU Dortmund
(鍖nishing mid 2010)
OSS addicted
eZ Components
PHPUnit
Various other projects . . .
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 2 / 25
3. Overview
1 Testing
2 PHPUnit
3 Advanced scenarios (optional)
4 The end
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 3 / 25
4. Outline
1 Testing
Methods of testing
Unit tests
2 PHPUnit
3 Advanced scenarios (optional)
4 The end
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 4 / 25
5. A little survey . . .
Do you test?
When?
How?
Who?
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 5 / 25
6. A little survey . . .
Do you test?
When?
How?
Who?
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 5 / 25
7. A little survey . . .
Do you test?
When?
How?
Who?
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 5 / 25
8. A little survey . . .
Do you test?
When?
How?
Who?
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 5 / 25
9. Ways of testing
Automatic vs. manual
Developer vs. tester
Internal vs. external
Back end vs. front end
Code vs. appearance
Functional vs. non-functional
Dynamic vs. static
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 6 / 25
10. Ways of testing
Automatic vs. manual
Developer vs. tester
Internal vs. external
Back end vs. front end
Code vs. appearance
Functional vs. non-functional
Dynamic vs. static
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 6 / 25
11. Ways of testing
Automatic vs. manual
Developer vs. tester
Internal vs. external
Back end vs. front end
Code vs. appearance
Functional vs. non-functional
Dynamic vs. static
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 6 / 25
12. Ways of testing
Automatic vs. manual
Developer vs. tester
Internal vs. external
Back end vs. front end
Code vs. appearance
Functional vs. non-functional
Dynamic vs. static
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 6 / 25
13. Ways of testing
Automatic vs. manual
Developer vs. tester
Internal vs. external
Back end vs. front end
Code vs. appearance
Functional vs. non-functional
Dynamic vs. static
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 6 / 25
14. Ways of testing
Automatic vs. manual
Developer vs. tester
Internal vs. external
Back end vs. front end
Code vs. appearance
Functional vs. non-functional
Dynamic vs. static
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 6 / 25
15. Ways of testing
Automatic vs. manual
Developer vs. tester
Internal vs. external
Back end vs. front end
Code vs. appearance
Functional vs. non-functional
Dynamic vs. static
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 6 / 25
16. Ways of testing
Automatic vs. manual
Developer vs. tester
Internal vs. external
Back end vs. front end
Code vs. appearance
Functional vs. non-functional
Dynamic vs. static
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 6 / 25
17. Test methods
Unit tests
Integration tests
Regression tests
Acceptance tests
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 7 / 25
18. Unit tests
Validate functionality
Test a single unit of code
Avoid regressions
Verify interfaces
Test bugs dedicatedly
Force code modularization
Migrate safely
Test driven development (TDD)
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 8 / 25
19. Unit tests
Validate functionality
Test a single unit of code
Avoid regressions
Verify interfaces
Test bugs dedicatedly
Force code modularization
Migrate safely
Test driven development (TDD)
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 8 / 25
20. Unit tests
Validate functionality
Test a single unit of code
Avoid regressions
Verify interfaces
Test bugs dedicatedly
Force code modularization
Migrate safely
Test driven development (TDD)
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 8 / 25
21. Unit tests
Validate functionality
Test a single unit of code
Avoid regressions
Verify interfaces
Test bugs dedicatedly
Force code modularization
Migrate safely
Test driven development (TDD)
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 8 / 25
22. Unit tests
Validate functionality
Test a single unit of code
Avoid regressions
Verify interfaces
Test bugs dedicatedly
Force code modularization
Migrate safely
Test driven development (TDD)
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 8 / 25
23. Unit tests
Validate functionality
Test a single unit of code
Avoid regressions
Verify interfaces
Test bugs dedicatedly
Force code modularization
Migrate safely
Test driven development (TDD)
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 8 / 25
24. Unit tests
Validate functionality
Test a single unit of code
Avoid regressions
Verify interfaces
Test bugs dedicatedly
Force code modularization
Migrate safely
Test driven development (TDD)
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 8 / 25
25. Unit tests
Validate functionality
Test a single unit of code
Avoid regressions
Verify interfaces
Test bugs dedicatedly
Force code modularization
Migrate safely
Test driven development (TDD)
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 8 / 25
26. Outline
1 Testing
2 PHPUnit
Installation
PHPUnit basics
Code examples
3 Advanced scenarios (optional)
4 The end
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 9 / 25
27. PHPUnit
Port of JUnit to PHP
Many enhancements
Database tests
Code coverage
Data providers
Invented by Sebastian Bergmann
Standard for unit testing in PHP
http://www.phpunit.de/
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 10 / 25
35. Lets dig into some code
Lets dig into some code
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 13 / 25
36. Outline
1 Testing
2 PHPUnit
3 Advanced scenarios (optional)
Custom test environment
Testing a WebDAV server
Testing graphic generation
Testing parsers
4 The end
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 14 / 25
37. eZ Component test runner
Custom test runner
Integrated auto loading
Component base testing
Run all tests
Extended test case / suite classes
Custom assertions
Database testing
Utility functions
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 15 / 25
39. Semi-automatic regression tests
Manual client test run
De鍖ned test receipe
Capture request / response data
Replay request in unit tests
Detect response regressions
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 17 / 25
40. Binary regressions
Binary di鍖erences in generated images
Test failures depending on
PHP version
GD version
Operating system
Images visually equivalent
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 18 / 25
41. Custom assertions
Custom assertion
Custom equality constraint
Based on ImageMagick
Allows de鍖ned gap
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 19 / 25
42. Untestable code
Parsers are highly dependant
De-coupling hardly possible
Huge amount of mock objects
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 20 / 25
43. Integration tests
Test parser as a whole
Small test 鍖les
Manually create / validate
Large overall tests
Manual inspection of generated data
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 21 / 25
44. Outline
1 Testing
2 PHPUnit
3 Advanced scenarios (optional)
4 The end
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 22 / 25
46. The end
I hope you enjoyed the session
際際滷s and material
http://schlitt.info/opensource
http://www.slideshare.net/tobyS
Contact: Tobias Schlitt <toby@php.net>
Tobias Schlitt (PHP World Kongress 2009) Unit-Tests 2009-11-24 24 / 25