Unit testing with PHPUnit allows developers to automate testing of classes and functions. Tests can validate expected outputs and behaviors and catch bugs. PHPUnit provides assertions to validate results and annotations to organize tests, mark them as incomplete, or specify expected exceptions. Fixtures can set up and tear down test environments and data. Writing thorough automated tests improves code quality and prevents regressions.
4. class CoreTest extends PHPUnit_framework_TestCase {
public function TestCount() {
$testArray = array(‘value1’,’value2’,’value3’);
$countResult = count($testArray);
$this->assertEquals(3, $countResult);
}
}
5. What you want is to write tests that fail
even though you think they should work,
or tests that succeed even though you
think they should fail.
You want to write tests that will pay you
back with information.
Erich Gamma
9. STEPS
1. Verify that you can reproduce the bug.
2. Find the smallest-scale demonstration of the
bug in the code.
3. Write an automated test that fails now but
will succeed when the bug is fixed.
4. Fix the bug.
10. CODE COVERAGE The beauty of testing is found not in
the effort but in the effiency.
Knowing what should be tested is
beautiful, and knowing what is being
tested is beautiful.
Murali Nandigama
11.
12. public function testEmpty()
{
$stack = array();
@depends $this->assertEmpty($stack);
return $stack;
}
/**
* @depends testEmpty
*/
public function testPush(array $stack)
{
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertNotEmpty($stack);
return $stack;
}
13. /**
* @dataProvider provider
*/
@dataProvider public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
14. @expectedException
/**
* @expectedException InvalidArgumentException
* @expectedExceptionMessage Right Message
*/
public function testExceptionHasRightMessage()
{
throw new InvalidArgumentException('Some Message', 10);
}
/**
* @expectedException InvalidArgumentException
* @expectedExceptionCode 20
*/
public function testExceptionHasRightCode()
{
throw new InvalidArgumentException('Some Message', 10);
}
15. expectOutputString
public function testExpectFooActualFoo()
{
$this->expectOutputString('foo');
print 'foo';
}
17. setUp() setUpBeforeClass()
tearDown() tearDownAfterClass()
protected function setUp()
Fixtures
{
$this->stack = array();
}
public function testEmpty()
{
$this->assertTrue(empty($this->stack));
}
public function testPush()
{
array_push($this->stack, 'foo');
$this->assertEquals('foo', $this->stack[count($this->stack)-1]);
$this->assertFalse(empty($this->stack));
}
18. markTestIncomplete()
Incomplete & Skipped markTestSkipped()
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
phpunit
-‐-‐verbose
SampleTest
PHPUnit
3.6.0
by
Sebas4an
Bergmann.
I
Time:
0
seconds,
Memory:
3.75Mb
There
was
1
incomplete
test:
1)
SampleTest::testSomething
This
test
has
not
been
implemented
yet.
/home/sb/SampleTest.php:12
OK,
but
incomplete
or
skipped
tests!
Tests:
1,
Asser4ons:
1,
Incomplete:
1.