2. What is Unit-Testing?
unit testing is a method by which individual units of source
code, sets of one or more computer program modules
together with associated control data, usage procedures, and
operating procedures are tested to determine if they are fit for
use... Intuitively, one can view a unit as the smallest
testable part of an application.
http://en.wikipedia.org/wiki/Unit_testing
unit testing is the safe ground I can hold onto when the
deadline is coming, an insurance policy against the
unavoidable changes, a safe harbor for my soul when
everything is shaking, including my belief in whether I am
capable of writing working code at all.
Me
5. Why is Unit-Testing Important?
Unit tests:
Find problems early
Facilitate change
Simplify integration
Play the role of living documentation
Sometimes aid software design
Save time (and money, and nerves) in the long run
Build a safety layer which creates a warm fuzzy feeling
inside the soul of the developer
6. What Makes Unit-Tests Work?
Each unit test is independent from the others
Unit tests are ran automatically and frequently
Best used as part of an automated build procedure
They should run fast
8. How Do Unit-Tests Become
Independent and Fast?
Through isolation from:
the environment (DB, file system)
other tests
external systems (APIs, web services)
collaborators (other objects)
9. How is Isolation achieved?
Through the use of test doubles: “an object or procedure that
looks and behaves like its release-intended counterpart, but
is actually a simplified version that reduces the complexity
and facilitates testing”
“Testing-essentials mock objects explained”, Jeff Carouth
10. Types of Test Doubles
dummy
stub
mock
spy
fake
11. Warning: Terminology Kills
Dummy, mock, and fake are often used
interchangeably by many authors to refer to a
kind (or many kinds, or a mixed type) of a testing
double
There is a degree of difference, depending of
what extend of real functionality do these test
objects posses and how they implement it, but
what matters is when can each of them can be
useful to you.
12. Warning: Terminology Really Kills
No Implementation
Full Implementation
“Exploring The Continuum Of Test Doubles”, Mark Seemann
http://msdn.microsoft.com/en-us/magazine/cc163358.aspx
13. The Mock Turtle
Then the Queen left off, quite out of breath,
and said to Alice,
"Have you seen the Mock Turtle yet?"
"No," said Alice. "I don't even know what a Mock Turtle is."
"It's the thing Mock Turtle Soup is made from,"
said the Queen.
(Alice in Wonderland, chapter 9)
14. Mock Turtle & Mock Turtle Soup
The Mock Turtle is a fictional character devised
by Lewis Carroll from his popular book Alice's
Adventures in Wonderland. Its name is taken
from a dish that was popular in the Victorian
period, mock turtle soup.
Mock turtle soup is an English soup that was
created in the mid-18th century as a cheaper
imitation of green turtle soup. It often uses brains
and organ meats such as calf's head or a calf's
foot to duplicate the texture and flavour of the
original turtle meat.
Wikipedia
15. A Word About The Tool-set
Popular unit-testing frameworks for PHP:
PHPUnit
Simpletest
Mockery
16. The Industry Standard: PHPUnit
Why?
Great documentation
Very powerful (you will see)
Very easy installation/upgrade via pear
Great userbase
Integration with phing
Very passionate and dedicated author:
Sebastian Bergmann
17. 1.
Dummy
A dummy is just a placeholder for a real object,
required by the one you are testing, but not really
used.
26. 3.
Mock & Spy
A mock object sets and asserts pre-defined
expectations of the methods it should or should
not receive
A spy records information about what was called
and can be used to verify calls (or the absence of
calls)
32. 5. Fake
A fake is actually a simpler implementation of a
real object
33. Wrapping it in one sentence ...
The question is NOT whether you should test or not,
but HOW should you test.
34. Resources
“PHPUnit Documentation: Chapter 10. Test Doubles” by Sebastian Bergmann
http://phpunit.de/manual/3.7/en/test-doubles.html
“Testing Essentials: Mock Objects Explained” by Jeff Carouth
https://speakerdeck.com/jcarouth/zendcon-2013-testing-essentials-mock-objects-explained