SlideShare a Scribd company logo
1 of 73
Download to read offline
THE STATE OF PHPUNIT
     Volker Dusch / @__edorian
ABOUT ME
PHP since 10 years
CI
CleanCode
DevOps
TDD
Shipping
GET IN TOUCH

stackoverflow:
Twitter: @__edorian
Xing / G+: Volker Dusch
IRC: edorian
Mail: php@wallbash.com
LET'S GO
Unit testing in PHP got mainstream
THAT'S A GOOD THING!
                  Unit testing got "normal" in PHP
Even people that don't really know PHP or even the CLI know that they
                        should write unit tests.
AGENDA
Current State
PHPUnit.next
The EcoSystem
Annoying things we got rid of
Features you might have missed
Upcoming stuff
Test suite organization
Discussion
CURRENT STATE
Version: 3.6.12
Over 60 contributors since 3.6.0
Deep into the 3.6 Bugfix cycle, no new features will be added. Those
go into .next
French docs thanks to @poum and still current Japanese docs thanks
to @m-takagi!
If you want to help out:
https://github.com/sebastianbergmann/phpunit/#contributing
PHPUNIT.NEXT
   Next up: 3.7
   15+ features
   10+ issues fixed
   Details later
BC
Did you like upgrading to PHPUnit 3.6?
BC FREE-ISH
We are trying really hard to not introduce any BC breaks.
          Test listeners trigger one autoload call
          cwd gets restored after test case
          parameter cloning behavior
          Removed deprecated OutputTestCase
          and that's it
THE ECOSYSTEM
 http://phpqatools.org/ & friends
BDD
                        Use Behat, It's great!
We're not going to remove the BDD stuff in PHPUnit but It's not being
                            worked on.
WEB INTERFACE?
Not sure why you'd want that but someone solved that for you
       https://github.com/NSinopoli/VisualPHPUnit
MOCKING IS UGLY!
             Real world problems and solutions:
http://stackoverflow.com/search?tab=votes&q=[phpunit] mock
MOCKERY
                           Try it! It's great.
              Afraid it might be hard to set up and use?
Look into https://github.com/etsy/phpunit-extensions/wiki/Mockery

  Works with strict mode, leaves the old API intact and is as easy as
                        writing a comment:
   casMTs etnsPPntEtnin_okr_etae{
    ls yet xed HUi_xesosMceyTsCs

       /*@okr Fo*
        * mcey o /
       poetd$o;
        rtce fo

   }
LOTS OF LEGACY CODE?
            Or whatever "hard to test" is called these days.
              https://github.com/lapistano/proxy-object
One of the main purpose of this library is to expose invisible (private or
           protected) methods and properties to the SUT.
TESTING WEB SERVICES
Unit and Integration test web services with the same code?
     Try wsUnit https://github.com/lapistano/wsunit
IDE SUPPORT
Netbeans support improved and they adopted the skeleton-
generator
Honestly I have no clue about eclipse
PHPStorm has really beautiful coverage support by now
vim user? : p p n t - c v r g - e t
           !hui -oeaetx
JENKINS
Jenkins template: jenkins-php.org
clover php plugin
TRAVIS CI
Awesome for GitHub and collaboration
          has the way to run their tests documented by now
No really CI but a very cool test runner
Use --coverage-text if you want to show off :)
COMPOSER
                      Last week:
       When someone does the work it it will happen
                    This week:
                       Someone did.
                     Current status at
https://github.com/sebastianbergmann/phpunit/issues/522
PHAR
                        The PHP tool format
We still have issues with process-isolation and figuring out the nicest
                 way to maintain and build the phars.
      Hopefully the 3.7 alpha will also feature a 3.6 & 3.7 phar.
PHPUNIT-SELENIUM
           Now maintained by @giorgiosironi
           Code coverage support

If you ask me: Don't drive your web tests with phpunit.
          Use Behat or something non php.
ANNOYING THINGS WE GOT
        RID OF
@ BLOCK
When using process-isolation PHPUnit won't die silently when
            unserializing of the test result fails.
CLI ARGUMENT PARSING
   ppntTsATsAppTsBTsBpp
    hui et et.h et et.h


This only executed TestA. Now it gives you an error message that you
                        are doing it wrong.
HEY, LISTEN!
Test listeners now trigger one autoload call instead of being silently
               ignored when the class was not loaded.
EXCEPTIONAL
         Improved reporting of exceptions...
pbi fnto tsNseEcpin(
 ulc ucin etetdxetos)
{
  $3=nwEcpin'he';
   e   e xeto(Tre)
  $2=nwIvldruetxeto(To,0 $3;
   e   e naiAgmnEcpin'w' , e)
  $1=nwEcpin'n' 0 $2;
   e   e xeto(Oe, , e)
  trw$1
   ho  e;
}


              because it only told you...
EcpintcTs:tsNseEcpin
 xetoSaket:etetdxetos
Ecpin Oe
 xeto: n

[rc]
 tae


                      but now...
EXCEPTIONAL
...we are printing out the previous exception names, messages and
                               traces.
 EcpintcTs:tsNseEcpin
  xetoSaket:etetdxetos
 Ecpin Oe
  xeto: n

 [rc]
  tae

 Cue b
  asd y
 Ivldruetxeto:To
  naiAgmnEcpin w

 [rc]
  tae

 Cue b
  asd y
 Ecpin Tre
  xeto: he

 [rc]
  tae
?????????????????
Fixed an annoying crash when using --process-isolation with PHP 5.3
                      and detect_unicode=on.
EVEN MORE EXCEPTIONAL
@xetdxeto xeto
 epceEcpin Ecpin


                   Works again!
ONE MORE THING
Ftlerr Ucuh ecpin'HUi_rmwr_xeto'wt msae'e
 aa ro: nagt xeto PPntFaeokEcpin ih esg Ni
te "et.h"nr"et.h"cudb oee. i ..
 hr tsspp o tsspp  ol e pnd' n .


              That one is still alive. Sorry ;)
     It just means that PHPUnit can't find any tests.
FEATURES YOU MIGHT HAVE
        MISSED
LINE ENDINGS MISMATCH
Ise0Ts:tsCmaeifrnLnEdns
 su53et:etoprDfeetienig
Fie asrigta tosrnsaeietcl
 ald setn ht w tig r  dnia.
--Epce
 -  xetd
++Ata
 +  cul
@ @
 @ @
 #ann:Srnscnandfeetln edns
  Wrig tig oti  ifrn ie nig!
 fo
  o
IMPROVED THE JSON LOG
If tests produce output it is now properly included in the log.
BOOTSTRAP ORDER
Bootstrap script should be loaded before trying to load
                testSuiteLoaderClass.
PROCESS ISOLATION FOR EVERYONE
Process Isolation did not work when PHPUnit is invoked through
 Apache Ant, for instance, due to PHP binary detection issues.
@EXPECTEDEXCEPTIONCODE
   Now can be 0 or a string.
       Useful for PDO
BINARY MESS
    Before it broke your terminal and BEEPed at you
1 Foet:eto
 ) oTs:tsFo
Fie asrigta tosrnsaeeul
 ald setn ht w tig r qa.
--Epce
 -  xetd
++Ata
 +  cul
@ @
 @ @
-
+☺♥☻♦
+♀
 ♂
+☼◄‼§↨↓←↔▼
 ♫►↕¶▬↑→∟▲


              Now it shows a hex dump:
Bnr Srn:0000000.....
 iay tig x012345....
ONE LINE ANNOTATIONS
                You can use:
/*@xetdxeto uaEcpin*
 * epceEcpin Fbrxeto /
COUNTING ON IT
Now working with Countable and Iterator Interfaces:
             assertCount()
             assertAttributeCount()
             assertNotCount()
             assertAttributeNotCount()
             assertSameSize()
             assertNotSameSize()
FLUENT INTERFACES
           A little mock improvement:
-wl(ti-rtrSl()
 >il$hs>eunef);
@REQUIRES
/*
 *
 *@eursPP54
    rqie H .
 */
pbi fnto tsTat)
 ulc ucin etri(
{
}
MAGIC SUPPORT
assertEquals() now looks for (and invokes) a __toString() method when
                 an object and string are compared.
PERFORMANCE
setUpBeforeClass() and tearDownAfterClass() are no longer invoked
              when all tests of the class are skipped
UPCOMING STUFF
LESS MAGIC NUMBERS
    @expectedException* now works with constants:
/*
 *
 *@xetdxeto Cas
    epceEcpin ls
 *@xetdxetoCd @ls:TAO_ISN
    epceEcpinoe Cas:EPTMSIG
 *@xetdxetoMsae@ls:TAO_ISN_ESG
    epceEcpinesg  Cas:EPTMSIGMSAE
 */


              Reduce copy paste testing.
*TEST.PHP IS TOO MAINSTREAM
Added --test-suffix that allows specifying which filename suffixes are
                       recognised by PHPUnit.
               Helps out some projects with their CI.
                    I don't see a general use case.
{"JSON": "YES PLEASE"}
We added assertJson* functions that work like the existing assertXml*
                            functions.
   asrJoFlEulJoFl(
    setsnieqassnie)
   asrJoSrnEulJoFl(
    setsntigqassnie)
   asrJoSrnEulJoSrn(
    setsntigqassntig)
CALLBACK MATCHER
          Helps with complex assertions on mocks
pbi fnto sn(msae EdonCni $ofg
 ulc ucin ed$esg, npitofg cni)


 It's not pretty but it might solve that one annoying problem:
$o-epcs$hs>ne)
 fo>xet(ti-oc()
  -mto(sn'
   >ehd'ed)
  -wt(
   >ih
     $hs>qaT(sn)
      ti-eulo'y',
     $hs>alak
      ti-clbc(
        fnto (cni){
         ucin $ofg
          $r =$ofg>eUl)
           ul  cni-gtr(;
          i($r){trwnwEcpin'..) }
           f!ul   ho e xeto(..';
          rtr $r-gtot)=='tp/eapecm;
           eun ul>eHs(  = ht:/xml.o'
        }
     )
  );
OO-ARRAYS
asrAryaKy)
 setraHse(
asrAryoHse(
 setraNtaKy)


   Now work with objects that implement ArrayAccess.
PHPUNIT.XSD
       PHPUnit now provides a configuration.xsd schema file.
            http://schema.phpunit.de/configuration.xsd
Useful to validate your phpunit.xml and phpunit.xml.dist configuration
                                 files.
   <xlvrin"."ecdn=UF8?
    ?m eso=10 noig"T-">
   <hui
    ppnt
     xlsxi"tp/www.r/01XLceaisac"
      mn:s=ht:/w.3og20/MShm-ntne
     xinNmsaeceaoain
      s:oaepcShmLcto
       =ht:/ceappntd/ofgrto.s"
        "tp/shm.hui.ecniuainxd
     [.]
      ..
   >
MORE @REQUIRES
/*
 *
 *@eursPP54dv
    rqie H .-e
 *@eursPPnt37dv
    rqie HUi  .-e
 *@eursfnto smFn
    rqie ucin oeuc
 *@eursfnto Cas:o
    rqie ucin ls:fo
 *@eursetninac
    rqie xeso  p
 *@eursetninmsl
    rqie xeso  yqi
 */


        Require functions, methods and extensions
        Merges Class & Method doc blocks
        PHP & PHPUnit version get override
.PHPT IMPROVEMENTS
-TS-
 -ET-

G-0:asrEul( Ln Edn DfeecsAeOsue
 H53 setqas) ie nig ifrne r bcr

-FL-
 -IE-
<pp
 ?h

$SRE[ag'[]='-ocniuain;
 _EVR'rv]1 -n-ofgrto'
$SRE[ag'[]='su53et;
 _EVR'rv]2 Ise0Ts'
$SRE[ag'[]=_DR_./0/su53etpp;
 _EVR'rv]3 _I_)'53Ise0Ts.h'

rqieoc _DR_.'./../HUi/uoodpp;
 eur_ne _I_  /../.PPntAtla.h'
PPntTxU_omn:mi(;
 HUi_etICmad:an)
?>
.PHPT IMPROVEMENTS
-EPCF-
 -XET-
PPnt% b SbsinBrmn.
 HUi s y eata egan

F

Tm:% %,Mmr:%M
 ie i s eoy sb

Teews1fiue
 hr a alr:

1 Ise0Ts:tsCmaeifrnLnEdns
 ) su53et:etoprDfeetienig
Fie asrigta tosrnsaeietcl
 ald setn ht w tig r  dnia.
--Epce
 -  xetd
++Ata
 +  cul
@ @
 @ @
 #ann:Srnscnandfeetln edns
  Wrig tig oti  ifrn ie nig!
 fo
  o

%:i
 s%

FIUE!
 ALRS
Tss 1 Asrin:1 Fiue:1
 et: , setos , alrs .
.PHPT IMPROVEMENTS
Before 3.7 diffs where really hard to read.
Now the diff will be processed line by line.
LISTS AND COLLECTIONS
pbi fnto tsAsrCnanOlIsacsf)
 ulc ucin etsetotisnyntneO(
{
  $irr =ary
   lbay   ra(
     nwBo(,
      e ok)
     nwBo(
      e ok)
  );
  $hs>setotisnyntneO(
   ti-asrCnanOlIsacsf
     'ok,
      Bo'
     $irr
      lbay
  );
}


    Helper for checking Collection objects and arrays.
        Descriptive assertion and error message.
FAILED @EXPECTEDEXCEPTION ANNOTATIONS
                  Before:
Fie asrigta ecpino tp "roEcpin mthsepce ecp
 ald setn ht xeto f ye Errxeto" ace xetd xe
to "yxeto"
 in MEcpin.


                   Now:
Fie asrigta ecpino tp "roEcpin mthsepce ecp
 ald setn ht xeto f ye Errxeto" ace xetd xe
to "yxeto"
 in MEcpin.
Msaefo "roEcpin ws"neie vral $ts.
 esg rm Errxeto" a udfnd aibe hi"
LESS REQUIRES, LESS CRASHES
  <htls adnoeeFlsrmhtls=tu"
   wieit dUcvrdieFoWieit"re>


   People seem to constantly run into issues with code coverage
  <htls poesnoeeFlsrmhtls=tu"
   wieit rcsUcvrdieFoWieit"re>


When enabled, uncovered whitelisted files are processed to properly
            calculate the number of executable lines.
     If not we take a quite ok guess to get the number of ELOC.
MORE USEFUL GROUPS
$ppnt-gopFayet
  hui -ru lkTss



<hui>
 ppnt
  <rus
   gop>
   <xld>
    ecue
     <ru>lkTss/ru>
     gopFayet<gop
   <ecue
    /xld>
  <gop>
   /rus
  <etuts../
   tssie . >
<ppnt
 /hui>


              Now works as expected
TEST SUITE ORGANIZATION
FOLDER LAYOUT?
poet
 rjc/
  ppntxlds
   hui.m.it
  sc
   r/
  tss
   et/
   bosrppp
    otta.h
   ui/
    nt
   itgto/
    neain
   fntoa/(rsse/
    ucinl  o ytm)
   hles
    epr/
TEST DISTRIBUTION
http://elblinkin.info/2012/03/goldilocks-on-test-sizes/
SMALL HINTS
Use the xml configuration for pretty much everything
Separate unit and integration tests
Your unit test folders should mirror your applications folder
structure
To only execute specific tests use phpunit --filter or phpunit
tests/unit/module1
Use the strict mode from the get go and never turn it off.
Imho: Don't have a test namespace. Nicer to read and shows
production usage.
DISCUSSION
      Issues?
 Feature requests?
 Anything I missed?
THANK YOU
The State of PHPUnit
The State of PHPUnit

More Related Content

What's hot

PHPUnit: from zero to hero
PHPUnit: from zero to heroPHPUnit: from zero to hero
PHPUnit: from zero to heroJeremy Cook
 
Introduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitIntroduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitMichelangelo van Dam
 
Unit Testing Presentation
Unit Testing PresentationUnit Testing Presentation
Unit Testing Presentationnicobn
 
Test Driven Development with PHPUnit
Test Driven Development with PHPUnitTest Driven Development with PHPUnit
Test Driven Development with PHPUnitMindfire Solutions
 
[Webinar] An Hour with the CTO: All About APIs and the Nuxeo Platform
[Webinar] An Hour with the CTO: All About APIs and the Nuxeo Platform[Webinar] An Hour with the CTO: All About APIs and the Nuxeo Platform
[Webinar] An Hour with the CTO: All About APIs and the Nuxeo PlatformNuxeo
 
¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidade...
¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidade...¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidade...
¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidade...Software Guru
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Joseph Scott
 
Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516SOAT
 
Non stop random2b
Non stop random2bNon stop random2b
Non stop random2bphanhung20
 
Tetcon2016 160104
Tetcon2016 160104Tetcon2016 160104
Tetcon2016 160104Bordeaux I
 
Flow of events during Media Player creation in Android
Flow of events during Media Player creation in AndroidFlow of events during Media Player creation in Android
Flow of events during Media Player creation in AndroidSomenath Mukhopadhyay
 
Unit testing en iOS @ MobileCon Galicia
Unit testing en iOS @ MobileCon GaliciaUnit testing en iOS @ MobileCon Galicia
Unit testing en iOS @ MobileCon GaliciaRobot Media
 
Exploit Research and Development Megaprimer: Win32 Egghunter
Exploit Research and Development Megaprimer: Win32 EgghunterExploit Research and Development Megaprimer: Win32 Egghunter
Exploit Research and Development Megaprimer: Win32 EgghunterAjin Abraham
 
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練Sheng-Hao Ma
 
Automated tests - facts and myths
Automated tests - facts and mythsAutomated tests - facts and myths
Automated tests - facts and mythsWojciech Sznapka
 

What's hot (20)

PHPUnit: from zero to hero
PHPUnit: from zero to heroPHPUnit: from zero to hero
PHPUnit: from zero to hero
 
Introduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitIntroduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnit
 
Unit Testing Presentation
Unit Testing PresentationUnit Testing Presentation
Unit Testing Presentation
 
Test Driven Development with PHPUnit
Test Driven Development with PHPUnitTest Driven Development with PHPUnit
Test Driven Development with PHPUnit
 
[Webinar] An Hour with the CTO: All About APIs and the Nuxeo Platform
[Webinar] An Hour with the CTO: All About APIs and the Nuxeo Platform[Webinar] An Hour with the CTO: All About APIs and the Nuxeo Platform
[Webinar] An Hour with the CTO: All About APIs and the Nuxeo Platform
 
¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidade...
¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidade...¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidade...
¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidade...
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )
 
Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516Tests unitaires mock_kesako_20130516
Tests unitaires mock_kesako_20130516
 
Hidden Gems of Ruby 1.9
Hidden Gems of Ruby 1.9Hidden Gems of Ruby 1.9
Hidden Gems of Ruby 1.9
 
Non stop random2b
Non stop random2bNon stop random2b
Non stop random2b
 
Tetcon2016 160104
Tetcon2016 160104Tetcon2016 160104
Tetcon2016 160104
 
Flow of events during Media Player creation in Android
Flow of events during Media Player creation in AndroidFlow of events during Media Player creation in Android
Flow of events during Media Player creation in Android
 
GNU Parallel și GNU Stow
GNU Parallel și GNU StowGNU Parallel și GNU Stow
GNU Parallel și GNU Stow
 
Unit testing en iOS @ MobileCon Galicia
Unit testing en iOS @ MobileCon GaliciaUnit testing en iOS @ MobileCon Galicia
Unit testing en iOS @ MobileCon Galicia
 
Ipc
IpcIpc
Ipc
 
What is recursion?
What is recursion? What is recursion?
What is recursion?
 
Nantes Jug - Java 7
Nantes Jug - Java 7Nantes Jug - Java 7
Nantes Jug - Java 7
 
Exploit Research and Development Megaprimer: Win32 Egghunter
Exploit Research and Development Megaprimer: Win32 EgghunterExploit Research and Development Megaprimer: Win32 Egghunter
Exploit Research and Development Megaprimer: Win32 Egghunter
 
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
NTUSTxTDOH 資訊安全基礎工作坊 基礎逆向教育訓練
 
Automated tests - facts and myths
Automated tests - facts and mythsAutomated tests - facts and myths
Automated tests - facts and myths
 

Viewers also liked (20)

Hailey gettel
Hailey gettelHailey gettel
Hailey gettel
 
Chase A
Chase AChase A
Chase A
 
Field Studies Council anticipates savings of up to £100,000 per annum with do...
Field Studies Council anticipates savings of up to £100,000 per annum with do...Field Studies Council anticipates savings of up to £100,000 per annum with do...
Field Studies Council anticipates savings of up to £100,000 per annum with do...
 
Kelley
KelleyKelley
Kelley
 
Ethan Albert Native American Project for Mr. Morgan
Ethan Albert Native American Project for Mr. MorganEthan Albert Native American Project for Mr. Morgan
Ethan Albert Native American Project for Mr. Morgan
 
2118 Final
2118 Final2118 Final
2118 Final
 
Olivia
OliviaOlivia
Olivia
 
PPGNY Membership Drive
PPGNY Membership DrivePPGNY Membership Drive
PPGNY Membership Drive
 
Add topic
Add topicAdd topic
Add topic
 
National Geographic2
National Geographic2National Geographic2
National Geographic2
 
Future Uses Of Computers Powerpoint
Future  Uses Of  Computers  PowerpointFuture  Uses Of  Computers  Powerpoint
Future Uses Of Computers Powerpoint
 
כלי להערכת ההוראה באמצעות וידאו
כלי להערכת ההוראה באמצעות וידאוכלי להערכת ההוראה באמצעות וידאו
כלי להערכת ההוראה באמצעות וידאו
 
Edc Leap Social Media
Edc Leap Social MediaEdc Leap Social Media
Edc Leap Social Media
 
AUSTRALIA!!
AUSTRALIA!!AUSTRALIA!!
AUSTRALIA!!
 
Independent auto & home
Independent auto & homeIndependent auto & home
Independent auto & home
 
Sydney h
Sydney hSydney h
Sydney h
 
Pikas
PikasPikas
Pikas
 
Shoham main projects 2010
Shoham main projects 2010Shoham main projects 2010
Shoham main projects 2010
 
Hunter u.
Hunter u.Hunter u.
Hunter u.
 
Chloecollins
ChloecollinsChloecollins
Chloecollins
 

Similar to The State of PHPUnit

PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best PracticesEdorian
 
Making the most of 2.2
Making the most of 2.2Making the most of 2.2
Making the most of 2.2markstory
 
Multiprocessing with python
Multiprocessing with pythonMultiprocessing with python
Multiprocessing with pythonPatrick Vergain
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit TestingMike Lively
 
Fighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnitFighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnitJames Fuller
 
PythonBrasil[8] - CPython for dummies
PythonBrasil[8] - CPython for dummiesPythonBrasil[8] - CPython for dummies
PythonBrasil[8] - CPython for dummiesTatiana Al-Chueyr
 
(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart Pointers(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart PointersCarlo Pescio
 
A Unicorn Seeking Extraterrestrial Life: Analyzing SETI@home's Source Code
A Unicorn Seeking Extraterrestrial Life: Analyzing SETI@home's Source CodeA Unicorn Seeking Extraterrestrial Life: Analyzing SETI@home's Source Code
A Unicorn Seeking Extraterrestrial Life: Analyzing SETI@home's Source CodePVS-Studio
 
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...tutorialsruby
 
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...tutorialsruby
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6Wim Godden
 
streamparse and pystorm: simple reliable parallel processing with storm
streamparse and pystorm: simple reliable parallel processing with stormstreamparse and pystorm: simple reliable parallel processing with storm
streamparse and pystorm: simple reliable parallel processing with stormDaniel Blanchard
 
Integrating cloud stack with puppet
Integrating cloud stack with puppetIntegrating cloud stack with puppet
Integrating cloud stack with puppetPuppet
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJSPat Cito
 
[CCC-28c3] Post Memory Corruption Memory Analysis
[CCC-28c3] Post Memory Corruption Memory Analysis[CCC-28c3] Post Memory Corruption Memory Analysis
[CCC-28c3] Post Memory Corruption Memory AnalysisMoabi.com
 
Adventures in infrastructure as code
Adventures in infrastructure as codeAdventures in infrastructure as code
Adventures in infrastructure as codeJulian Simpson
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit TestingMike Lively
 
ooc - A hybrid language experiment
ooc - A hybrid language experimentooc - A hybrid language experiment
ooc - A hybrid language experimentAmos Wenger
 
ooc - A hybrid language experiment
ooc - A hybrid language experimentooc - A hybrid language experiment
ooc - A hybrid language experimentAmos Wenger
 

Similar to The State of PHPUnit (20)

PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best Practices
 
Making the most of 2.2
Making the most of 2.2Making the most of 2.2
Making the most of 2.2
 
Multiprocessing with python
Multiprocessing with pythonMultiprocessing with python
Multiprocessing with python
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
 
Fighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnitFighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnit
 
PythonBrasil[8] - CPython for dummies
PythonBrasil[8] - CPython for dummiesPythonBrasil[8] - CPython for dummies
PythonBrasil[8] - CPython for dummies
 
(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart Pointers(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart Pointers
 
A Unicorn Seeking Extraterrestrial Life: Analyzing SETI@home's Source Code
A Unicorn Seeking Extraterrestrial Life: Analyzing SETI@home's Source CodeA Unicorn Seeking Extraterrestrial Life: Analyzing SETI@home's Source Code
A Unicorn Seeking Extraterrestrial Life: Analyzing SETI@home's Source Code
 
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
 
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
exploit-writing-tutorial-part-5-how-debugger-modules-plugins-can-speed-up-bas...
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
 
PHP 7
PHP 7PHP 7
PHP 7
 
streamparse and pystorm: simple reliable parallel processing with storm
streamparse and pystorm: simple reliable parallel processing with stormstreamparse and pystorm: simple reliable parallel processing with storm
streamparse and pystorm: simple reliable parallel processing with storm
 
Integrating cloud stack with puppet
Integrating cloud stack with puppetIntegrating cloud stack with puppet
Integrating cloud stack with puppet
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
[CCC-28c3] Post Memory Corruption Memory Analysis
[CCC-28c3] Post Memory Corruption Memory Analysis[CCC-28c3] Post Memory Corruption Memory Analysis
[CCC-28c3] Post Memory Corruption Memory Analysis
 
Adventures in infrastructure as code
Adventures in infrastructure as codeAdventures in infrastructure as code
Adventures in infrastructure as code
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit Testing
 
ooc - A hybrid language experiment
ooc - A hybrid language experimentooc - A hybrid language experiment
ooc - A hybrid language experiment
 
ooc - A hybrid language experiment
ooc - A hybrid language experimentooc - A hybrid language experiment
ooc - A hybrid language experiment
 

More from Edorian

Your (coding) standards matter
Your (coding) standards matterYour (coding) standards matter
Your (coding) standards matterEdorian
 
Save time by applying clean code principles
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principlesEdorian
 
Nginx - The webserver you might actually like
Nginx - The webserver you might actually likeNginx - The webserver you might actually like
Nginx - The webserver you might actually likeEdorian
 
From dev to ops and beyond - getting it done
From dev to ops and beyond - getting it doneFrom dev to ops and beyond - getting it done
From dev to ops and beyond - getting it doneEdorian
 
Code review in practice
Code review in practiceCode review in practice
Code review in practiceEdorian
 
Nginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlinNginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlinEdorian
 
Clean code is not the goal - working software is
Clean code is not the goal - working software isClean code is not the goal - working software is
Clean code is not the goal - working software isEdorian
 
Nginx The webserver you might actually like
Nginx   The webserver you might actually likeNginx   The webserver you might actually like
Nginx The webserver you might actually likeEdorian
 
Stop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principlesStop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principlesEdorian
 
php unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my timephp unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my timeEdorian
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my timeEdorian
 

More from Edorian (11)

Your (coding) standards matter
Your (coding) standards matterYour (coding) standards matter
Your (coding) standards matter
 
Save time by applying clean code principles
Save time by applying clean code principlesSave time by applying clean code principles
Save time by applying clean code principles
 
Nginx - The webserver you might actually like
Nginx - The webserver you might actually likeNginx - The webserver you might actually like
Nginx - The webserver you might actually like
 
From dev to ops and beyond - getting it done
From dev to ops and beyond - getting it doneFrom dev to ops and beyond - getting it done
From dev to ops and beyond - getting it done
 
Code review in practice
Code review in practiceCode review in practice
Code review in practice
 
Nginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlinNginx & php fpm - the webserver you might actually like - php usergroup berlin
Nginx & php fpm - the webserver you might actually like - php usergroup berlin
 
Clean code is not the goal - working software is
Clean code is not the goal - working software isClean code is not the goal - working software is
Clean code is not the goal - working software is
 
Nginx The webserver you might actually like
Nginx   The webserver you might actually likeNginx   The webserver you might actually like
Nginx The webserver you might actually like
 
Stop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principlesStop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principles
 
php unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my timephp unconference Europa: Clean code - Stop wasting my time
php unconference Europa: Clean code - Stop wasting my time
 
Clean Code: Stop wasting my time
Clean Code: Stop wasting my timeClean Code: Stop wasting my time
Clean Code: Stop wasting my time
 

Recently uploaded

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 

Recently uploaded (20)

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 

The State of PHPUnit

  • 1. THE STATE OF PHPUNIT Volker Dusch / @__edorian
  • 2. ABOUT ME PHP since 10 years CI CleanCode DevOps TDD Shipping
  • 3.
  • 4. GET IN TOUCH stackoverflow: Twitter: @__edorian Xing / G+: Volker Dusch IRC: edorian Mail: php@wallbash.com
  • 6.
  • 7. Unit testing in PHP got mainstream
  • 8. THAT'S A GOOD THING! Unit testing got "normal" in PHP Even people that don't really know PHP or even the CLI know that they should write unit tests.
  • 9. AGENDA Current State PHPUnit.next The EcoSystem Annoying things we got rid of Features you might have missed Upcoming stuff Test suite organization Discussion
  • 10. CURRENT STATE Version: 3.6.12 Over 60 contributors since 3.6.0 Deep into the 3.6 Bugfix cycle, no new features will be added. Those go into .next French docs thanks to @poum and still current Japanese docs thanks to @m-takagi! If you want to help out: https://github.com/sebastianbergmann/phpunit/#contributing
  • 11. PHPUNIT.NEXT Next up: 3.7 15+ features 10+ issues fixed Details later
  • 12. BC Did you like upgrading to PHPUnit 3.6?
  • 13. BC FREE-ISH We are trying really hard to not introduce any BC breaks. Test listeners trigger one autoload call cwd gets restored after test case parameter cloning behavior Removed deprecated OutputTestCase and that's it
  • 15. BDD Use Behat, It's great! We're not going to remove the BDD stuff in PHPUnit but It's not being worked on.
  • 16. WEB INTERFACE? Not sure why you'd want that but someone solved that for you https://github.com/NSinopoli/VisualPHPUnit
  • 17. MOCKING IS UGLY! Real world problems and solutions: http://stackoverflow.com/search?tab=votes&q=[phpunit] mock
  • 18. MOCKERY Try it! It's great. Afraid it might be hard to set up and use? Look into https://github.com/etsy/phpunit-extensions/wiki/Mockery Works with strict mode, leaves the old API intact and is as easy as writing a comment: casMTs etnsPPntEtnin_okr_etae{ ls yet xed HUi_xesosMceyTsCs /*@okr Fo* * mcey o / poetd$o; rtce fo }
  • 19. LOTS OF LEGACY CODE? Or whatever "hard to test" is called these days. https://github.com/lapistano/proxy-object One of the main purpose of this library is to expose invisible (private or protected) methods and properties to the SUT.
  • 20. TESTING WEB SERVICES Unit and Integration test web services with the same code? Try wsUnit https://github.com/lapistano/wsunit
  • 21. IDE SUPPORT Netbeans support improved and they adopted the skeleton- generator Honestly I have no clue about eclipse PHPStorm has really beautiful coverage support by now vim user? : p p n t - c v r g - e t !hui -oeaetx
  • 23. TRAVIS CI Awesome for GitHub and collaboration has the way to run their tests documented by now No really CI but a very cool test runner Use --coverage-text if you want to show off :)
  • 24. COMPOSER Last week: When someone does the work it it will happen This week: Someone did. Current status at https://github.com/sebastianbergmann/phpunit/issues/522
  • 25.
  • 26. PHAR The PHP tool format We still have issues with process-isolation and figuring out the nicest way to maintain and build the phars. Hopefully the 3.7 alpha will also feature a 3.6 & 3.7 phar.
  • 27. PHPUNIT-SELENIUM Now maintained by @giorgiosironi Code coverage support If you ask me: Don't drive your web tests with phpunit. Use Behat or something non php.
  • 28. ANNOYING THINGS WE GOT RID OF
  • 29. @ BLOCK When using process-isolation PHPUnit won't die silently when unserializing of the test result fails.
  • 30. CLI ARGUMENT PARSING ppntTsATsAppTsBTsBpp hui et et.h et et.h This only executed TestA. Now it gives you an error message that you are doing it wrong.
  • 31. HEY, LISTEN! Test listeners now trigger one autoload call instead of being silently ignored when the class was not loaded.
  • 32. EXCEPTIONAL Improved reporting of exceptions... pbi fnto tsNseEcpin( ulc ucin etetdxetos) { $3=nwEcpin'he'; e e xeto(Tre) $2=nwIvldruetxeto(To,0 $3; e e naiAgmnEcpin'w' , e) $1=nwEcpin'n' 0 $2; e e xeto(Oe, , e) trw$1 ho e; } because it only told you... EcpintcTs:tsNseEcpin xetoSaket:etetdxetos Ecpin Oe xeto: n [rc] tae but now...
  • 33. EXCEPTIONAL ...we are printing out the previous exception names, messages and traces. EcpintcTs:tsNseEcpin xetoSaket:etetdxetos Ecpin Oe xeto: n [rc] tae Cue b asd y Ivldruetxeto:To naiAgmnEcpin w [rc] tae Cue b asd y Ecpin Tre xeto: he [rc] tae
  • 34. ????????????????? Fixed an annoying crash when using --process-isolation with PHP 5.3 and detect_unicode=on.
  • 35. EVEN MORE EXCEPTIONAL @xetdxeto xeto epceEcpin Ecpin Works again!
  • 36. ONE MORE THING Ftlerr Ucuh ecpin'HUi_rmwr_xeto'wt msae'e aa ro: nagt xeto PPntFaeokEcpin ih esg Ni te "et.h"nr"et.h"cudb oee. i .. hr tsspp o tsspp ol e pnd' n . That one is still alive. Sorry ;) It just means that PHPUnit can't find any tests.
  • 37. FEATURES YOU MIGHT HAVE MISSED
  • 38. LINE ENDINGS MISMATCH Ise0Ts:tsCmaeifrnLnEdns su53et:etoprDfeetienig Fie asrigta tosrnsaeietcl ald setn ht w tig r dnia. --Epce - xetd ++Ata + cul @ @ @ @ #ann:Srnscnandfeetln edns Wrig tig oti ifrn ie nig! fo o
  • 39. IMPROVED THE JSON LOG If tests produce output it is now properly included in the log.
  • 40. BOOTSTRAP ORDER Bootstrap script should be loaded before trying to load testSuiteLoaderClass.
  • 41. PROCESS ISOLATION FOR EVERYONE Process Isolation did not work when PHPUnit is invoked through Apache Ant, for instance, due to PHP binary detection issues.
  • 42. @EXPECTEDEXCEPTIONCODE Now can be 0 or a string. Useful for PDO
  • 43. BINARY MESS Before it broke your terminal and BEEPed at you 1 Foet:eto ) oTs:tsFo Fie asrigta tosrnsaeeul ald setn ht w tig r qa. --Epce - xetd ++Ata + cul @ @ @ @ - +☺♥☻♦ +♀ ♂ +☼◄‼§↨↓←↔▼ ♫►↕¶▬↑→∟▲ Now it shows a hex dump: Bnr Srn:0000000..... iay tig x012345....
  • 44. ONE LINE ANNOTATIONS You can use: /*@xetdxeto uaEcpin* * epceEcpin Fbrxeto /
  • 45. COUNTING ON IT Now working with Countable and Iterator Interfaces: assertCount() assertAttributeCount() assertNotCount() assertAttributeNotCount() assertSameSize() assertNotSameSize()
  • 46. FLUENT INTERFACES A little mock improvement: -wl(ti-rtrSl() >il$hs>eunef);
  • 47. @REQUIRES /* * *@eursPP54 rqie H . */ pbi fnto tsTat) ulc ucin etri( { }
  • 48. MAGIC SUPPORT assertEquals() now looks for (and invokes) a __toString() method when an object and string are compared.
  • 49. PERFORMANCE setUpBeforeClass() and tearDownAfterClass() are no longer invoked when all tests of the class are skipped
  • 51. LESS MAGIC NUMBERS @expectedException* now works with constants: /* * *@xetdxeto Cas epceEcpin ls *@xetdxetoCd @ls:TAO_ISN epceEcpinoe Cas:EPTMSIG *@xetdxetoMsae@ls:TAO_ISN_ESG epceEcpinesg Cas:EPTMSIGMSAE */ Reduce copy paste testing.
  • 52. *TEST.PHP IS TOO MAINSTREAM Added --test-suffix that allows specifying which filename suffixes are recognised by PHPUnit. Helps out some projects with their CI. I don't see a general use case.
  • 53. {"JSON": "YES PLEASE"} We added assertJson* functions that work like the existing assertXml* functions. asrJoFlEulJoFl( setsnieqassnie) asrJoSrnEulJoFl( setsntigqassnie) asrJoSrnEulJoSrn( setsntigqassntig)
  • 54. CALLBACK MATCHER Helps with complex assertions on mocks pbi fnto sn(msae EdonCni $ofg ulc ucin ed$esg, npitofg cni) It's not pretty but it might solve that one annoying problem: $o-epcs$hs>ne) fo>xet(ti-oc() -mto(sn' >ehd'ed) -wt( >ih $hs>qaT(sn) ti-eulo'y', $hs>alak ti-clbc( fnto (cni){ ucin $ofg $r =$ofg>eUl) ul cni-gtr(; i($r){trwnwEcpin'..) } f!ul ho e xeto(..'; rtr $r-gtot)=='tp/eapecm; eun ul>eHs( = ht:/xml.o' } ) );
  • 55. OO-ARRAYS asrAryaKy) setraHse( asrAryoHse( setraNtaKy) Now work with objects that implement ArrayAccess.
  • 56. PHPUNIT.XSD PHPUnit now provides a configuration.xsd schema file. http://schema.phpunit.de/configuration.xsd Useful to validate your phpunit.xml and phpunit.xml.dist configuration files. <xlvrin"."ecdn=UF8? ?m eso=10 noig"T-"> <hui ppnt xlsxi"tp/www.r/01XLceaisac" mn:s=ht:/w.3og20/MShm-ntne xinNmsaeceaoain s:oaepcShmLcto =ht:/ceappntd/ofgrto.s" "tp/shm.hui.ecniuainxd [.] .. >
  • 57. MORE @REQUIRES /* * *@eursPP54dv rqie H .-e *@eursPPnt37dv rqie HUi .-e *@eursfnto smFn rqie ucin oeuc *@eursfnto Cas:o rqie ucin ls:fo *@eursetninac rqie xeso p *@eursetninmsl rqie xeso yqi */ Require functions, methods and extensions Merges Class & Method doc blocks PHP & PHPUnit version get override
  • 58. .PHPT IMPROVEMENTS -TS- -ET- G-0:asrEul( Ln Edn DfeecsAeOsue H53 setqas) ie nig ifrne r bcr -FL- -IE- <pp ?h $SRE[ag'[]='-ocniuain; _EVR'rv]1 -n-ofgrto' $SRE[ag'[]='su53et; _EVR'rv]2 Ise0Ts' $SRE[ag'[]=_DR_./0/su53etpp; _EVR'rv]3 _I_)'53Ise0Ts.h' rqieoc _DR_.'./../HUi/uoodpp; eur_ne _I_ /../.PPntAtla.h' PPntTxU_omn:mi(; HUi_etICmad:an) ?>
  • 59. .PHPT IMPROVEMENTS -EPCF- -XET- PPnt% b SbsinBrmn. HUi s y eata egan F Tm:% %,Mmr:%M ie i s eoy sb Teews1fiue hr a alr: 1 Ise0Ts:tsCmaeifrnLnEdns ) su53et:etoprDfeetienig Fie asrigta tosrnsaeietcl ald setn ht w tig r dnia. --Epce - xetd ++Ata + cul @ @ @ @ #ann:Srnscnandfeetln edns Wrig tig oti ifrn ie nig! fo o %:i s% FIUE! ALRS Tss 1 Asrin:1 Fiue:1 et: , setos , alrs .
  • 60. .PHPT IMPROVEMENTS Before 3.7 diffs where really hard to read. Now the diff will be processed line by line.
  • 61. LISTS AND COLLECTIONS pbi fnto tsAsrCnanOlIsacsf) ulc ucin etsetotisnyntneO( { $irr =ary lbay ra( nwBo(, e ok) nwBo( e ok) ); $hs>setotisnyntneO( ti-asrCnanOlIsacsf 'ok, Bo' $irr lbay ); } Helper for checking Collection objects and arrays. Descriptive assertion and error message.
  • 62. FAILED @EXPECTEDEXCEPTION ANNOTATIONS Before: Fie asrigta ecpino tp "roEcpin mthsepce ecp ald setn ht xeto f ye Errxeto" ace xetd xe to "yxeto" in MEcpin. Now: Fie asrigta ecpino tp "roEcpin mthsepce ecp ald setn ht xeto f ye Errxeto" ace xetd xe to "yxeto" in MEcpin. Msaefo "roEcpin ws"neie vral $ts. esg rm Errxeto" a udfnd aibe hi"
  • 63. LESS REQUIRES, LESS CRASHES <htls adnoeeFlsrmhtls=tu" wieit dUcvrdieFoWieit"re> People seem to constantly run into issues with code coverage <htls poesnoeeFlsrmhtls=tu" wieit rcsUcvrdieFoWieit"re> When enabled, uncovered whitelisted files are processed to properly calculate the number of executable lines. If not we take a quite ok guess to get the number of ELOC.
  • 64. MORE USEFUL GROUPS $ppnt-gopFayet hui -ru lkTss <hui> ppnt <rus gop> <xld> ecue <ru>lkTss/ru> gopFayet<gop <ecue /xld> <gop> /rus <etuts../ tssie . > <ppnt /hui> Now works as expected
  • 66. FOLDER LAYOUT? poet rjc/ ppntxlds hui.m.it sc r/ tss et/ bosrppp otta.h ui/ nt itgto/ neain fntoa/(rsse/ ucinl o ytm) hles epr/
  • 68.
  • 69. SMALL HINTS Use the xml configuration for pretty much everything Separate unit and integration tests Your unit test folders should mirror your applications folder structure To only execute specific tests use phpunit --filter or phpunit tests/unit/module1 Use the strict mode from the get go and never turn it off. Imho: Don't have a test namespace. Nicer to read and shows production usage.
  • 70. DISCUSSION Issues? Feature requests? Anything I missed?