SlideShare una empresa de 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

Más contenido relacionado

La actualidad más candente

Ppt of soap ui
Ppt of soap uiPpt of soap ui
Ppt of soap ui
pkslide28
 

La actualidad más candente (20)

JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
 
POSTMAN.pptx
POSTMAN.pptxPOSTMAN.pptx
POSTMAN.pptx
 
Rest assured
Rest assuredRest assured
Rest assured
 
JUnit- A Unit Testing Framework
JUnit- A Unit Testing FrameworkJUnit- A Unit Testing Framework
JUnit- A Unit Testing Framework
 
Unit testing with JUnit
Unit testing with JUnitUnit testing with JUnit
Unit testing with JUnit
 
API_Testing_with_Postman
API_Testing_with_PostmanAPI_Testing_with_Postman
API_Testing_with_Postman
 
JUNit Presentation
JUNit PresentationJUNit Presentation
JUNit Presentation
 
API Testing Using REST Assured with TestNG
API Testing Using REST Assured with TestNGAPI Testing Using REST Assured with TestNG
API Testing Using REST Assured with TestNG
 
API Testing
API TestingAPI Testing
API Testing
 
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj Rollison
 
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
 
Automation Testing by Selenium Web Driver
Automation Testing by Selenium Web DriverAutomation Testing by Selenium Web Driver
Automation Testing by Selenium Web Driver
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
 
Selenium WebDriver
Selenium WebDriverSelenium WebDriver
Selenium WebDriver
 
An Introduction To Automated API Testing
An Introduction To Automated API TestingAn Introduction To Automated API Testing
An Introduction To Automated API Testing
 
API Testing with Open Source Code and Cucumber
API Testing with Open Source Code and CucumberAPI Testing with Open Source Code and Cucumber
API Testing with Open Source Code and Cucumber
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-framework
 
Ppt of soap ui
Ppt of soap uiPpt of soap ui
Ppt of soap ui
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
 

Destacado

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

Destacado (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 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
 

Similar 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
 
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)
 

Más de Mindfire Solutions

Más 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

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
anilsa9823
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Último (20)

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
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...
 

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.