SlideShare a Scribd company logo
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

More Related Content

What's hot

Web develop in flask
Web develop in flaskWeb develop in flask
Web develop in flask
Jim Yeh
 
Jsp presentation
Jsp presentationJsp presentation
Jsp presentation
Sher Singh Bardhan
 
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
An Introduction to JUnit 5 and how to use it with Spring boot tests and MockitoAn Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
shaunthomas999
 
Test Driven development
Test Driven developmentTest Driven development
Test Driven development
MU VN
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutos
phelypploch
 
Php mysql
Php mysqlPhp mysql
Php
PhpPhp
4.3 MySQL + PHP
4.3 MySQL + PHP4.3 MySQL + PHP
4.3 MySQL + PHP
Jalpesh Vasa
 
Oops in PHP
Oops in PHPOops in PHP
Oops in PHP
Mindfire Solutions
 
PHP
PHPPHP
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
Gardênia Santana
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
Felipe J. R. Vieira
 
Programação Web com HTML e CSS
Programação Web com HTML e CSSProgramação Web com HTML e CSS
Programação Web com HTML e CSS
Victor Adriel Oliveira
 
Introduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHPIntroduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHP
wahidullah mudaser
 
Unit Test Presentation
Unit Test PresentationUnit Test Presentation
Unit Test PresentationSayedur Rahman
 
Le Wagon - Web 101
Le Wagon - Web 101Le Wagon - Web 101
Le Wagon - Web 101
Edward_Schults
 
PHPUnit - Unit testing
PHPUnit - Unit testingPHPUnit - Unit testing
PHPUnit - Unit testing
Nguyễn Đào Thiên Thư
 

What's hot (20)

Web develop in flask
Web develop in flaskWeb develop in flask
Web develop in flask
 
Jsp presentation
Jsp presentationJsp presentation
Jsp presentation
 
Php
PhpPhp
Php
 
php
phpphp
php
 
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
An Introduction to JUnit 5 and how to use it with Spring boot tests and MockitoAn Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
 
Test Driven development
Test Driven developmentTest Driven development
Test Driven development
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutos
 
Php mysql
Php mysqlPhp mysql
Php mysql
 
Php
PhpPhp
Php
 
4.3 MySQL + PHP
4.3 MySQL + PHP4.3 MySQL + PHP
4.3 MySQL + PHP
 
Oops in PHP
Oops in PHPOops in PHP
Oops in PHP
 
PHP
PHPPHP
PHP
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
Programação Web com HTML e CSS
Programação Web com HTML e CSSProgramação Web com HTML e CSS
Programação Web com HTML e CSS
 
Introduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHPIntroduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHP
 
Unit Test Presentation
Unit Test PresentationUnit Test Presentation
Unit Test Presentation
 
Le Wagon - Web 101
Le Wagon - Web 101Le Wagon - Web 101
Le Wagon - Web 101
 
PHPUnit - Unit testing
PHPUnit - Unit testingPHPUnit - Unit testing
PHPUnit - Unit testing
 

Viewers also liked

PHPUnit
PHPUnitPHPUnit
Unit testing PHP apps with PHPUnit
Unit testing PHP apps with PHPUnitUnit testing PHP apps with PHPUnit
Unit testing PHP apps with PHPUnit
Michelangelo van Dam
 
PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best Practices
Edorian
 
Unit Testing using PHPUnit
Unit Testing using  PHPUnitUnit Testing using  PHPUnit
Unit Testing using PHPUnitvaruntaliyan
 
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
Gauthier Delamarre
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit Testing
Mike Lively
 
Testes de Performance na Nuvem | TDC2014
Testes de Performance na Nuvem | TDC2014Testes de Performance na Nuvem | TDC2014
Testes de Performance na Nuvem | TDC2014
Júlio de Lima
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
Sachithra Gayan
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
ricardophp
 
BDD avec Behat, PhpSpec et Symfony2
BDD avec Behat, PhpSpec et Symfony2BDD avec Behat, PhpSpec et Symfony2
BDD avec Behat, PhpSpec et Symfony2
Mohammed Rhamnia
 
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
Steve Kamerman
 
PHP Unit y TDD
PHP Unit y TDDPHP Unit y TDD
PHP Unit y TDD
Emergya
 
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
Jay Friendly
 
PHPUnit with CakePHP and Yii
PHPUnit with CakePHP and YiiPHPUnit with CakePHP and Yii
PHPUnit with CakePHP and Yii
madhavi Ghadge
 
User-centered open source
User-centered open sourceUser-centered open source
User-centered open source
Jacqueline Kazil
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1
Ke Wei Louis
 
NoSql Day - Apertura
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - Apertura
WEBdeBS
 
Html5 History-API
Html5 History-APIHtml5 History-API
Html5 History-API
Mindfire Solutions
 

Viewers also liked (20)

PHPUnit
PHPUnitPHPUnit
PHPUnit
 
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
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit Testing
 
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
 

Similar to Test Driven Development with PHPUnit

Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
Mike Lively
 
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_v2Tricode (part of Dept)
 
Unit Testing in PHP
Unit Testing in PHPUnit Testing in PHP
Unit Testing in PHP
Radu Murzea
 
Fighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnitFighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnit
James Fuller
 
Unit testing for WordPress
Unit testing for WordPressUnit testing for WordPress
Unit testing for WordPress
Harshad Mane
 
Test in action week 2
Test in action   week 2Test in action   week 2
Test in action week 2Yi-Huan Chan
 
PHPUnit best practices presentation
PHPUnit best practices presentationPHPUnit best practices presentation
PHPUnit best practices presentation
Thanh Robi
 
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
Michelangelo van Dam
 
Writing Test Cases with PHPUnit
Writing Test Cases with PHPUnitWriting Test Cases with PHPUnit
Writing Test Cases with PHPUnit
Shouvik Chatterjee
 
Phpunit
PhpunitPhpunit
Phpunit
japan_works
 
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 2012Michelangelo van Dam
 
Php tests tips
Php tests tipsPhp tests tips
Php tests tips
Damian Sromek
 
2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps2010 07-28-testing-zf-apps
2010 07-28-testing-zf-apps
Venkata Ramana
 
MT_01_unittest_python.pdf
MT_01_unittest_python.pdfMT_01_unittest_python.pdf
MT_01_unittest_python.pdf
Hans Jones
 
Junit_.pptx
Junit_.pptxJunit_.pptx
Junit_.pptx
Suman Sourav
 
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
Michelangelo van Dam
 
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
Mark Niebergall
 
Unit testing
Unit testingUnit testing
Unit testing
Arthur Purnama
 
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)
ENDelt260
 

Similar to 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
 
Laravel Unit Testing
Laravel Unit TestingLaravel Unit Testing
Laravel Unit Testing
 
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)
 

More from Mindfire Solutions

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

More from 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
 

Recently uploaded

Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
Srikant77
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Jay Das
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 

Recently uploaded (20)

Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 

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.