SlideShare uma empresa Scribd logo
1 de 30
Test Driven Development with
PHPUnit
By: Kshirodra Meher
Software Engineer
Mindfire Solutions
Contents

Who am I ?

What & Why to do Testing ?

What is Unit testing ?

PHPUnit

Starting with PHPUnit

PHPUnit Example

Test Dependencies

Data Provider

Testing Error & Exceptions

Test Output
Assertion
Fixtures
Database Testing
Incomplete & Skipped Test
Test Doubles
Testing Practice
Code Coverage Analysis
Skeleton Generator & Selenium
Sources & Questions?
Who am I ?
Kshirodra Meher
PHP Developer,
Mindfire Solutions
(Aug-2011 to Present)
What & Why to do Testing ?

Testing : revealing a person's capabilities by putting them under strain;
challenging. :P

S/W Testing : Software testing is an investigation conducted to provide
stakeholders with information about the quality of the product or service
under test.

Why S/W Testing :
- Meet the requirements that guided its design and development
- Expected Results / Unexpected Failure

Software never was perfect and won’t get perfect. But is that a license
to create garbage? The missing ingredient is our reluctance to quantify
quality. – Boris Beizer
What is Unit Testing ?

Unit : The smallest testable code of an application

Test : Code that checks code on

If you don’t like unit testing your product, most likely your customers
won’t like to test it either.

Benefits :
- Changing/maintaining code
- Fixing cost is low
- Faster development etc etc .
Simple Test

Comparable to JUnit/PHPUnit

Created by Marcus Baker

Popular for testing web
pages at browser level
PHPUnit

PHPUnit is a programmer oriented testing framework for PHP

Part of xUnit family (JUnit, SUnit..)

Created By : Sebastian Bergmann

Integrated in most IDE :
- Eclipse, Netbeans, Zend Studio, PHPStorm

Integrated/Supported by :
- Zend Framework, Cake, Symfony
Starting with PHPUnit

PHPUnit can be installed using PEAR installer

Commands to install :
#pear config-set auto_discover 1
#pear install pear.phpunit.de/PHPUnit
Writing Tests for PHPUnit

The tests for a class Class go into a class ClassTest

ClassTest inherits(most of the time) from PHPUnit_Framework_TestCase

The tests are public methods that are named test*.

Inside the test methods, assertions methods such as assertEquals() are
used to assert that an actual value matches an expected value.
Lets do 'Hello World'
<?php
class HelloWorld {
public $helloWorld;
public function __construct($string = ‘Hello
World!’) {
$this->helloWorld = $string;
}
public function sayHello() {
return $this->helloWorld;
}
}
Test HelloWorld Class
require_once 'HelloWorld.php';
class HelloWorldTest extends PHPUnit_Framework_TestCase {
public function test__construct() {
$hw = new HelloWorld();
$this->assertInstanceOf('HelloWorld', $hw);
}
public function testSayHello() {
$hw = new HelloWorld();
$string = $hw->sayHello();
$this->assertEquals('Hello World!', $string);
}
}
Testing HelloWorld
#phpunit HelloWorldTest.php
PHPUnit 4.0.7 by Sebastian Bergmann.
..
Time: 70 ms, Memory: 3.75Mb
OK (2 tests, 2 assertions)
PHPUnit Test Results Details

. - Printed when the test succeeds

F - Printed when an assertion fails while running the test method

E - Printed when an error occurs while running the test method

S - Printed when the test has been skipped

I - Printed when the test is marked as being incomplete or not yet
implemented
PHPUnit distinguishes between failures and errors. A failure is a violated
PHPUnit assertion such as a failing assertEquals() call. An error is an
unexpected exception or a PHP error. Sometimes this distinction proves
useful since errors tend to be easier to fix than failures.
Test Dependencies

PHPUnit supports the declaration of the explicit dependencies between test
methods. Such dependencies do not define the order in which the test
methods are to be executed but they allow the returning of an instance of the
test fixture by a producer and passing it to the dependent consumers.

A producer is a test method that yields its unit under test as return values.

A consumer is a test method that depends on one or more producers and
their return values.

Annotated by @depends
Data Provider

Test method can accept arbitrary arguments. These arguments are to be
provided by a data provider methods.
- Array
- Objects (that implements iterator)

Multiple arguments

Annotated by @dataProvider
Testing Error & Exceptions

PHPUnit converts PHP errors, warning, and notices that are triggered during
the execution of a test to an exception. Using these exceptions, you can, for
instance, expect a test to trigger a PHP error

Tests whether an exception is thrown inside the tested code.

Annotated by @expectedExceptions
Test Output

Sometimes you want to assert that the execution of a method, for instance,
generates an expected output via echo or print.
class OutputTest extends PHPUnit_Framework_TestCase {
public function testExpectFooActualFoo() {
$this->expectOutputString('foo');
print 'foo';
}
public function testExpectBarActualBaz() {
$this->expectOutputString('bar');
print 'baz';
}
}
Assertions
assertArrayHasKey()
assertClassHasAttribute()
assertClassHasStaticAttribute()
assertContains()
assertContainsOnly()
assertContainsOnlyInstancesOf()
assertCount()
assertEmpty()
assertEqualXMLStructure()
assertEquals()
assertFalse()
assertFileEquals()
assertFileExists()
assertGreaterThan()
assertGreaterThanOrEqual()
assertInstanceOf()
assertInternalType()
assertJsonFileEqualsJsonFile()
assertJsonStringEqualsJsonFile()
assertJsonStringEqualsJsonString()
Assertions
assertLessThan()
assertLessThanOrEqual()
assertNull()
assertObjectHasAttribute()
assertRegExp()
assertStringMatchesFormat()
assertStringMatchesFormatFile()
assertSame()
assertSelectCount()
assertSelectEquals()
assertSelectRegExp()
assertStringEndsWith()
assertStringEqualsFile()
assertStringStartsWith()
assertTag()
assertThat()
assertTrue()
assertXmlFileEqualsXmlFile()
assertXmlStringEqualsXmlFile()
assertXmlStringEqualsXmlString()
Fixtures

Is a known state of an application

Need to be set up at the start of the test

Need to be torn down at the end of the test

Share states over the test methods

setUp() is where you create objects against which you will test

tearDown() is where you clean up the objects against which you tested

More setUp() then tearDown()

The setUpBeforeClass() and tearDownAfterClass() template methods are
called before the first test of the test case class is run and after the last test
of the case class is run, respectively
Database Testing

PHPUnit Database Extension

Can be installed by :
# pear install phpunit/DbUnit

Currently supported database :
- MySQL
- PostgreSQL
- Oracle
- SQLite

Has access to other database systems such as IBM DB2 / Microsoft SQL
Server through Zend Framework or Doctrine 2 integration
Database Testing

Four stages of database testing
- Setup fixture
- Exercise System Under Test
- Verify Outcome
- Teardown
(1. Clean-Up Database, 2. Set up fixture, 3–5. Run Test, Verify outcome and
Teardown)

Must implement
- getConnection() : Returns a database connection wrapper
- getDataSet() : Returns the dataset to seed the database with
Incomplete & Skipped Test

Interface PHP_Unit_Framework_IncompleteTest
- markTestImcomplete()
- markTestIncomplete(string $msg)

Skipped Test
- markTestSkipped()
- markTestIncomplete(string $msg)

Skipped @requires
Test Doubles

Introduced By : Gerard Meszaros

Replace a System Under Test (SUT) for the purpose of testing

Stubs
- Used for providing the tested code with "indirect input"

Mocks
- Used for verifying "indirect output" of the tested code, by first defining the
expectations before the tested code is executed
Testing Practices

Development
- All unit tests run correctly.
- The code communicates its design principles.
- The code contains no redundancies.
- The code contains the minimal number of classes and methods.

Debugging
- Verify that you can reproduce the defect.
- Find the smallest-scale demonstration of the defect in the code.
- Write an automated test that fails now but will succeed when the defect is
fixed.
- Fix the defect.
Code Coverage Analysis

How do you find code that is not yet tested or, in other words, not yet
covered by a test?

How do you measure testing completeness?

phpunit --coverage-html ./report BankAccountTest
Skeleton Generator & Selenium

PHPUnit Skeleton Generator is a tool that can generate skeleton test
classes from production code classes and vice versa.

pear install phpunit/PHPUnit_SkeletonGenerator

phpunit-skelgen --test Calculator

Selenium
- Is a test tool that allows you to write automated user-interface tests for web
applications in any programming language against any HTTP website using
any mainstream browser.
Sources

http://phpunit.de/manual/current/en/index.html

https://github.com/sebastianbergmann/phpunit
Thank You

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

JUnit 5
JUnit 5JUnit 5
JUnit 5
 
Java Unit Testing
Java Unit TestingJava Unit Testing
Java Unit Testing
 
Node js Modules and Event Emitters
Node js Modules and Event EmittersNode js Modules and Event Emitters
Node js Modules and Event Emitters
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first steps
 
Laravel Unit Testing
Laravel Unit TestingLaravel Unit Testing
Laravel Unit Testing
 
50 most frequently used unix linux commands (with examples)
50 most frequently used unix   linux commands (with examples)50 most frequently used unix   linux commands (with examples)
50 most frequently used unix linux commands (with examples)
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
GMock framework
GMock frameworkGMock framework
GMock framework
 
Unit testing with JUnit
Unit testing with JUnitUnit testing with JUnit
Unit testing with JUnit
 
TestNG - The Next Generation of Unit Testing
TestNG - The Next Generation of Unit TestingTestNG - The Next Generation of Unit Testing
TestNG - The Next Generation of Unit Testing
 
JUnit- A Unit Testing Framework
JUnit- A Unit Testing FrameworkJUnit- A Unit Testing Framework
JUnit- A Unit Testing Framework
 
Introduction to PowerShell
Introduction to PowerShellIntroduction to PowerShell
Introduction to PowerShell
 
05 junit
05 junit05 junit
05 junit
 
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
PHPCon China 2016 - 從學徒變大師:談 Laravel 框架擴充與套件開發
 
Class 3 - PHP Functions
Class 3 - PHP FunctionsClass 3 - PHP Functions
Class 3 - PHP Functions
 
Red hat linux essentials
Red hat linux essentialsRed hat linux essentials
Red hat linux essentials
 
Go Lang Tutorial
Go Lang TutorialGo Lang Tutorial
Go Lang Tutorial
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Laravel Dusk
Laravel DuskLaravel Dusk
Laravel Dusk
 
Puppeteer - Headless Chrome Node API
Puppeteer - Headless Chrome Node APIPuppeteer - Headless Chrome Node API
Puppeteer - Headless Chrome Node API
 

Destaque

Unit Testing using PHPUnit
Unit Testing using  PHPUnitUnit Testing using  PHPUnit
Unit Testing using PHPUnit
varuntaliyan
 

Destaque (20)

Unit testing PHP apps with PHPUnit
Unit testing PHP apps with PHPUnitUnit testing PHP apps with PHPUnit
Unit testing PHP apps with PHPUnit
 
PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best Practices
 
Unit Testing using PHPUnit
Unit Testing using  PHPUnitUnit Testing using  PHPUnit
Unit Testing using PHPUnit
 
La qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitairesLa qualité au meilleur prix grâce aux tests unitaires
La qualité au meilleur prix grâce aux tests unitaires
 
to Test or not to Test?
to Test or not to Test?to Test or not to Test?
to Test or not to Test?
 
Testes de Performance na Nuvem | TDC2014
Testes de Performance na Nuvem | TDC2014Testes de Performance na Nuvem | TDC2014
Testes de Performance na Nuvem | TDC2014
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
chapters
chapterschapters
chapters
 
BDD avec Behat, PhpSpec et Symfony2
BDD avec Behat, PhpSpec et Symfony2BDD avec Behat, PhpSpec et Symfony2
BDD avec Behat, PhpSpec et Symfony2
 
IPC 2013 - High Performance PHP with HipHop
IPC 2013 - High Performance PHP with HipHopIPC 2013 - High Performance PHP with HipHop
IPC 2013 - High Performance PHP with HipHop
 
PHP Unit y TDD
PHP Unit y TDDPHP Unit y TDD
PHP Unit y TDD
 
Automated php unit testing in drupal 8
Automated php unit testing in drupal 8Automated php unit testing in drupal 8
Automated php unit testing in drupal 8
 
PHPUnit with CakePHP and Yii
PHPUnit with CakePHP and YiiPHPUnit with CakePHP and Yii
PHPUnit with CakePHP and Yii
 
User-centered open source
User-centered open sourceUser-centered open source
User-centered open source
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1
 
NoSql Day - Apertura
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - Apertura
 
Html5 History-API
Html5 History-APIHtml5 History-API
Html5 History-API
 
2007 - 应用系统脆弱性概论
2007 - 应用系统脆弱性概论 2007 - 应用系统脆弱性概论
2007 - 应用系统脆弱性概论
 
Authentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVCAuthentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVC
 

Semelhante a Test Driven Development with PHPUnit

Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
Tricode (part of Dept)
 
Test in action week 2
Test in action   week 2Test in action   week 2
Test in action week 2
Yi-Huan Chan
 
Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012
Michelangelo van Dam
 

Semelhante a Test Driven Development with PHPUnit (20)

Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
 
Unit Testing in PHP
Unit Testing in PHPUnit Testing in PHP
Unit Testing in PHP
 
Fighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnitFighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnit
 
Unit testing for WordPress
Unit testing for WordPressUnit testing for WordPress
Unit testing for WordPress
 
Test in action week 2
Test in action   week 2Test in action   week 2
Test in action week 2
 
PHPUnit best practices presentation
PHPUnit best practices presentationPHPUnit best practices presentation
PHPUnit best practices presentation
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
Writing Test Cases with PHPUnit
Writing Test Cases with PHPUnitWriting Test Cases with PHPUnit
Writing Test Cases with PHPUnit
 
Phpunit
PhpunitPhpunit
Phpunit
 
Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012
 
Php tests tips
Php tests tipsPhp tests tips
Php tests tips
 
2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps
 
MT_01_unittest_python.pdf
MT_01_unittest_python.pdfMT_01_unittest_python.pdf
MT_01_unittest_python.pdf
 
Junit_.pptx
Junit_.pptxJunit_.pptx
Junit_.pptx
 
Workshop quality assurance for php projects - phpdublin
Workshop quality assurance for php projects - phpdublinWorkshop quality assurance for php projects - phpdublin
Workshop quality assurance for php projects - phpdublin
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023
 
Unit testing
Unit testingUnit testing
Unit testing
 
Unlock The Mystery Of PHPUnit (Wave PHP 2018)
Unlock The Mystery Of PHPUnit (Wave PHP 2018)Unlock The Mystery Of PHPUnit (Wave PHP 2018)
Unlock The Mystery Of PHPUnit (Wave PHP 2018)
 
Php Unit With Zend Framework Zendcon09
Php Unit With Zend Framework   Zendcon09Php Unit With Zend Framework   Zendcon09
Php Unit With Zend Framework Zendcon09
 

Mais de Mindfire Solutions

Mais de Mindfire Solutions (20)

Physician Search and Review
Physician Search and ReviewPhysician Search and Review
Physician Search and Review
 
diet management app
diet management appdiet management app
diet management app
 
Business Technology Solution
Business Technology SolutionBusiness Technology Solution
Business Technology Solution
 
Remote Health Monitoring
Remote Health MonitoringRemote Health Monitoring
Remote Health Monitoring
 
Influencer Marketing Solution
Influencer Marketing SolutionInfluencer Marketing Solution
Influencer Marketing Solution
 
ELMAH
ELMAHELMAH
ELMAH
 
High Availability of Azure Applications
High Availability of Azure ApplicationsHigh Availability of Azure Applications
High Availability of Azure Applications
 
IOT Hands On
IOT Hands OnIOT Hands On
IOT Hands On
 
Glimpse of Loops Vs Set
Glimpse of Loops Vs SetGlimpse of Loops Vs Set
Glimpse of Loops Vs Set
 
Oracle Sql Developer-Getting Started
Oracle Sql Developer-Getting StartedOracle Sql Developer-Getting Started
Oracle Sql Developer-Getting Started
 
Adaptive Layout In iOS 8
Adaptive Layout In iOS 8Adaptive Layout In iOS 8
Adaptive Layout In iOS 8
 
Introduction to Auto-layout : iOS/Mac
Introduction to Auto-layout : iOS/MacIntroduction to Auto-layout : iOS/Mac
Introduction to Auto-layout : iOS/Mac
 
LINQPad - utility Tool
LINQPad - utility ToolLINQPad - utility Tool
LINQPad - utility Tool
 
Get started with watch kit development
Get started with watch kit developmentGet started with watch kit development
Get started with watch kit development
 
Swift vs Objective-C
Swift vs Objective-CSwift vs Objective-C
Swift vs Objective-C
 
Material Design in Android
Material Design in AndroidMaterial Design in Android
Material Design in Android
 
Introduction to OData
Introduction to ODataIntroduction to OData
Introduction to OData
 
Ext js Part 2- MVC
Ext js Part 2- MVCExt js Part 2- MVC
Ext js Part 2- MVC
 
ExtJs Basic Part-1
ExtJs Basic Part-1ExtJs Basic Part-1
ExtJs Basic Part-1
 
Spring Security Introduction
Spring Security IntroductionSpring Security Introduction
Spring Security Introduction
 

Último

%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 

Último (20)

%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 

Test Driven Development with PHPUnit

  • 1. Test Driven Development with PHPUnit By: Kshirodra Meher Software Engineer Mindfire Solutions
  • 2. Contents  Who am I ?  What & Why to do Testing ?  What is Unit testing ?  PHPUnit  Starting with PHPUnit  PHPUnit Example  Test Dependencies  Data Provider  Testing Error & Exceptions  Test Output Assertion Fixtures Database Testing Incomplete & Skipped Test Test Doubles Testing Practice Code Coverage Analysis Skeleton Generator & Selenium Sources & Questions?
  • 3. Who am I ? Kshirodra Meher PHP Developer, Mindfire Solutions (Aug-2011 to Present)
  • 4. What & Why to do Testing ?  Testing : revealing a person's capabilities by putting them under strain; challenging. :P  S/W Testing : Software testing is an investigation conducted to provide stakeholders with information about the quality of the product or service under test.  Why S/W Testing : - Meet the requirements that guided its design and development - Expected Results / Unexpected Failure  Software never was perfect and won’t get perfect. But is that a license to create garbage? The missing ingredient is our reluctance to quantify quality. – Boris Beizer
  • 5. What is Unit Testing ?  Unit : The smallest testable code of an application  Test : Code that checks code on  If you don’t like unit testing your product, most likely your customers won’t like to test it either.  Benefits : - Changing/maintaining code - Fixing cost is low - Faster development etc etc .
  • 6. Simple Test  Comparable to JUnit/PHPUnit  Created by Marcus Baker  Popular for testing web pages at browser level
  • 7. PHPUnit  PHPUnit is a programmer oriented testing framework for PHP  Part of xUnit family (JUnit, SUnit..)  Created By : Sebastian Bergmann  Integrated in most IDE : - Eclipse, Netbeans, Zend Studio, PHPStorm  Integrated/Supported by : - Zend Framework, Cake, Symfony
  • 8. Starting with PHPUnit  PHPUnit can be installed using PEAR installer  Commands to install : #pear config-set auto_discover 1 #pear install pear.phpunit.de/PHPUnit
  • 9. Writing Tests for PHPUnit  The tests for a class Class go into a class ClassTest  ClassTest inherits(most of the time) from PHPUnit_Framework_TestCase  The tests are public methods that are named test*.  Inside the test methods, assertions methods such as assertEquals() are used to assert that an actual value matches an expected value.
  • 10. Lets do 'Hello World' <?php class HelloWorld { public $helloWorld; public function __construct($string = ‘Hello World!’) { $this->helloWorld = $string; } public function sayHello() { return $this->helloWorld; } }
  • 11. Test HelloWorld Class require_once 'HelloWorld.php'; class HelloWorldTest extends PHPUnit_Framework_TestCase { public function test__construct() { $hw = new HelloWorld(); $this->assertInstanceOf('HelloWorld', $hw); } public function testSayHello() { $hw = new HelloWorld(); $string = $hw->sayHello(); $this->assertEquals('Hello World!', $string); } }
  • 12. Testing HelloWorld #phpunit HelloWorldTest.php PHPUnit 4.0.7 by Sebastian Bergmann. .. Time: 70 ms, Memory: 3.75Mb OK (2 tests, 2 assertions)
  • 13. PHPUnit Test Results Details  . - Printed when the test succeeds  F - Printed when an assertion fails while running the test method  E - Printed when an error occurs while running the test method  S - Printed when the test has been skipped  I - Printed when the test is marked as being incomplete or not yet implemented PHPUnit distinguishes between failures and errors. A failure is a violated PHPUnit assertion such as a failing assertEquals() call. An error is an unexpected exception or a PHP error. Sometimes this distinction proves useful since errors tend to be easier to fix than failures.
  • 14. Test Dependencies  PHPUnit supports the declaration of the explicit dependencies between test methods. Such dependencies do not define the order in which the test methods are to be executed but they allow the returning of an instance of the test fixture by a producer and passing it to the dependent consumers.  A producer is a test method that yields its unit under test as return values.  A consumer is a test method that depends on one or more producers and their return values.  Annotated by @depends
  • 15. Data Provider  Test method can accept arbitrary arguments. These arguments are to be provided by a data provider methods. - Array - Objects (that implements iterator)  Multiple arguments  Annotated by @dataProvider
  • 16. Testing Error & Exceptions  PHPUnit converts PHP errors, warning, and notices that are triggered during the execution of a test to an exception. Using these exceptions, you can, for instance, expect a test to trigger a PHP error  Tests whether an exception is thrown inside the tested code.  Annotated by @expectedExceptions
  • 17. Test Output  Sometimes you want to assert that the execution of a method, for instance, generates an expected output via echo or print. class OutputTest extends PHPUnit_Framework_TestCase { public function testExpectFooActualFoo() { $this->expectOutputString('foo'); print 'foo'; } public function testExpectBarActualBaz() { $this->expectOutputString('bar'); print 'baz'; } }
  • 20. Fixtures  Is a known state of an application  Need to be set up at the start of the test  Need to be torn down at the end of the test  Share states over the test methods  setUp() is where you create objects against which you will test  tearDown() is where you clean up the objects against which you tested  More setUp() then tearDown()  The setUpBeforeClass() and tearDownAfterClass() template methods are called before the first test of the test case class is run and after the last test of the case class is run, respectively
  • 21. Database Testing  PHPUnit Database Extension  Can be installed by : # pear install phpunit/DbUnit  Currently supported database : - MySQL - PostgreSQL - Oracle - SQLite  Has access to other database systems such as IBM DB2 / Microsoft SQL Server through Zend Framework or Doctrine 2 integration
  • 22. Database Testing  Four stages of database testing - Setup fixture - Exercise System Under Test - Verify Outcome - Teardown (1. Clean-Up Database, 2. Set up fixture, 3–5. Run Test, Verify outcome and Teardown)  Must implement - getConnection() : Returns a database connection wrapper - getDataSet() : Returns the dataset to seed the database with
  • 23. Incomplete & Skipped Test  Interface PHP_Unit_Framework_IncompleteTest - markTestImcomplete() - markTestIncomplete(string $msg)  Skipped Test - markTestSkipped() - markTestIncomplete(string $msg)  Skipped @requires
  • 24. Test Doubles  Introduced By : Gerard Meszaros  Replace a System Under Test (SUT) for the purpose of testing  Stubs - Used for providing the tested code with "indirect input"  Mocks - Used for verifying "indirect output" of the tested code, by first defining the expectations before the tested code is executed
  • 25. Testing Practices  Development - All unit tests run correctly. - The code communicates its design principles. - The code contains no redundancies. - The code contains the minimal number of classes and methods.  Debugging - Verify that you can reproduce the defect. - Find the smallest-scale demonstration of the defect in the code. - Write an automated test that fails now but will succeed when the defect is fixed. - Fix the defect.
  • 26. Code Coverage Analysis  How do you find code that is not yet tested or, in other words, not yet covered by a test?  How do you measure testing completeness?  phpunit --coverage-html ./report BankAccountTest
  • 27. Skeleton Generator & Selenium  PHPUnit Skeleton Generator is a tool that can generate skeleton test classes from production code classes and vice versa.  pear install phpunit/PHPUnit_SkeletonGenerator  phpunit-skelgen --test Calculator  Selenium - Is a test tool that allows you to write automated user-interface tests for web applications in any programming language against any HTTP website using any mainstream browser.
  • 29.