unit testing with phpunit
TRANSCRIPT
UNIT TESTING with PHPUnit
about me @ferca_tw
ferran caellas puig
Core Developer at eyeOS Computer geek and Open Source enthusiast
UNIT TESTING What is
class CoreTest extends PHPUnit_framework_TestCase {
public function TestCount() { $testArray = array(‘value1’,’value2’,’value3’); $countResult = count($testArray); $this->assertEquals(3, $countResult); }
}
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
During development Writing tests
TEST-DRIVEN DEVELOPMENT TDD
During debugging Writing tests
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.
STEPS
CODE
COVE
RAGE
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
@de
pend
s public function testEmpty() { $stack = array(); $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; }
@da
taPr
ovide
r /** * @dataProvider provider */ 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) ); }
@ex
pect
edEx
cept
ion
/** * @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); }
expe
ctOu
tput
Strin
g public function testExpectFooActualFoo() { $this->expectOutputString('foo'); print 'foo'; }
Asse
rtion
s assertArrayHasKey() assertClassHasA/ribute() assertClassHasSta4cA/ribute() assertContains() assertContainsOnly() assertCount() assertEmpty() assertEqualXMLStructure() assertEquals() assertFalse() assertFileEquals() assertFileExists() assertGreaterThan() assertGreaterThanOrEqual() assertInstanceOf() assertInternalType() assertLessThan() assertLessThanOrEqual() assertNull()
assertObjectHasA/ribute() assertRegExp() assertStringMatchesFormat() assertStringMatchesFormatFile() assertSame() assertSelectCount() assertSelectEquals() assertSelectRegExp() assertStringEndsWith() assertStringEqualsFile() assertStringStartsWith() assertTag() assertThat() assertTrue() assertXmlFileEqualsXmlFile() assertXmlStringEqualsXmlFile() assertXmlStringEqualsXmlString()
Fixtu
res
setUp() tearDown()
setUpBeforeClass() tearDownAfterClass()
protected function setUp() { $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)); }
Incom
plete
& Sk
ipped
markTestIncomplete() 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.
UNIT TESTING with PHPUnit