SlideShare a Scribd company logo
1 of 36
Download to read offline
PHP koda vienībtestēšana
     (ar PHPUnit)

     Krišs Rauhvargers,
         27.02.2012
Par kādu testēšanu ir runa?

IEVADS
Kas ir vienībtestēšana?
• Oficiāli:
   – Metode, ko lieto atsevišķu programmatūras
     koda daļu pārbaudei, vai tās darbojas
     saskaņā ar specifikāciju.
   – Testē mazāko iespējamo koda vienību
      • klases metodi
      • moduļa funkciju
• Vienkāršotā izpratnē
   – Testi, ko raksta pats programmētājs
Galvenie mērķi
• Pārliecināties, ka
  – kods dara to, kas paredzēts
  – labojumi kodā (t.sk. refaktorēšana) nesabojā
    kaut ko citu
• Uzlabot koda kvalitāti pirms integrācijas
  testēšanas
• Padarīt kodu uzturamu arī citiem
• Automatizācija
Vienībtestēšana VS integrācijas
                      testēšana
  • Vienībtesti nav integrācijas testi!
            – Integrācijas testi apskata vairāku moduļu
              sadarbību vai visu sistēmu kopumā
            – Vienībtests pārbauda katru moduli atsevišķi

                                           Vienībtests:
                                           - vai šim vītnes
                                            platums
                                           visur ir vienāds?
http://www.bolt-manufacturer.com/picture/hex-bolts/heavy-hex-bolt.jpg




                                 Integrācijas tests:
                   - vai ar šo var uzspiest līdz 45?
                                                 http://inhabitat.com/files/mowercycle23.jpg
Ko nozīmē "katru moduli
            atsevišķi"?
• Vienībtestā jācenšas izolēt pārbaudāmo
  moduli no citiem moduļiem
• Kļūdu gadījumā gribam zināt, kas tieši
  vainīgs
• Lai izolētu no pārējiem moduļiem, lieto
  imitācijas (mock) un aizbāžņus (stub)
  saistīto moduļu vietā
xUnit
• xUnit: vienībtestēšanas ietvaru saime
  dažādām valodām, kas
  – izmanto programmatiskus testus
  – lieto vienus un tos pašus jēdzienus
• Vēsturiski pirmais ir SUnit (SmallTalk unit
  testing framework)
• Vēlāk arī JUnit (Java), CPPUnit (C++),
  NUnit (.Net saimes valodas), PHPUnit.
xUnit termini
• Testu kopa (test suite)
   – Atsevišķi testi, ko izpilda moduļa funkcionalitātes
     pārbaudei
   – Pārbaude kādam koda modulim (piemēram, klasei
     DateTime būtu testu kopa DateTimeTest)
• Testpiemērs (test case)
   – Tests, ko izpilda kādas funkcionalitātes pārbaudei
• Testa konteksts (test fixture)
   – Datu/vides sagatavošana testu izpildīšanai
• Testu izpilde (test execution)
   – Testu darbināšana dotajā kontekstā
• Apgalvojumi (assertions)
   – Kodā pierakstāmi pieņēmumi, kam jābūt spēkā pirms/pēc
     koda izpildes
• http://www.martinfowler.com/bliki/Xunit.html
xUnit testu kopas uzbūve
public class SomethingTest inerhits Test {
    //sagatavošanās ('fixture')
    public void SetUp() {
  }
  //savākšana aiz sevis
  public void TearDown{
  }
  //paši testi
  public void TestMethod1(){}
  public void TestMethod2(){}
  ...
}
xUnit testu izpildes principi
• Meklē visas testu kopas
• Katrā testu kopā meklē visas metodes, kas
  sākas ar "Test"
• Katrai šādai metodei izpilda:
  SomethingTest->SetUp();
  SomethingTest->TestMethod1();
  SomethingTest->TearDown();

  SomethingTest->SetUp();
  SomethingTest->TestMethod2();
  SomethingTest->TearDown();
Vienībtestēšanas maksimums
• Nopietnākais vienībtestēšanas lietojums –
  testu bāzētā izstrāde (test driven
  development)
  – specificē moduļu interfeisus
  – raksta testus, kas pārbauda šos interfeisus
  – tikai tad sāk rakstīt pašu kodu
• Sākotnēji visi testi būs "izlaisti" vai "failed"
• Beigās būs strādājoša sistēma un 100%
  veiksmīgi testi
INSTALĒŠANA
PHPUnit
• PHPUnit ir skriptu komplekts, kas
  nodrošina
  – testu izpildi
  – testu rezultātu attēlošanu
  – koda pārklājuma analīzi
PHPUnit instalēšana
• Vieglākais PHPUnit instalēšanas
  risinājums ir PEAR pakotne
  pear channel-discover pear.phpunit.de
  pear channel-discover components.ez.no
  pear channel-discover pear.symfony-project.com
  pear install phpunit/PHPUnit

• Lai uzstādītu pilnu versiju, vajadzēs arī
  Xdebug
PEAR: kas tas tāds?
• PEAR: PHP Extension and Application
  Repository
• Ideja: komdandrindas rīks, kas ļautu instalēt
  PHP paplašinājumus
• Uzlikšana:
    1.   iedarbina PHP komandrindas interfeisu
    2.   lejuplādē http://pear.php.net/go-pear.phar
    3.   php go-pear.phar
    4.   pārstartē tīmekļa serveri
•   Var gadīties, ka noder
    pear upgrade --force PEAR
Kas ir Xdebug?
• PHP ir skriptēšanas valoda, tas izpildās
  kāda procesa ietvaros (tīmekļa serverī,
  komandrindā)
  – "klasiska" atkļūdošanas pieeja, kur pieslēdzas
    procesam, būtu sarežģīta
• Xdebug ir PHP modulis, kas
  – darbojas PHP interpretatora iekšienē
  – uz ārpusi sniedz atkļūdošanas informāciju
  – darbojas kā HTTP serviss
XDebug uzlikšana
• Xdebug ir PECL modulis
• Instalējams ar PEAR/PECL:
   – pecl install xdebug

• Ini failā papildus:
[xdebug]
zend_extension=/Applications/XAMPP/xamppfiles/lib/php/php-
   5.3.1/extensions/no-debug-non-zts-20090626/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
PEAR uz XAMPP/Wamp
• XAMPP
 – Jaunākās versijas ir ar PEAR,
 – Xdebug jāinstalē pašiem
• WampSever
 – Vecākās versijās PEAR var būt jāliek pašiem
 – Xdebug vajadzētu būt
Xdebug atbalsts
• NetBeans – kopš 6.versijas integrēts
  atbalsts
• Notepad++ var iekonfigurēt:
  – http://dowdrake.com/showthread.php?343-
    Xdebug-with-WAMPServer-and-Notepad
Netbeans iekonfigurēšana

Preferences / PHP
NetBeans iekonfigurēšana (2)
Vienībtestēšana: prefrences / unit testing
Piedāvā meklēt phpunit.sh, patiesībā saucas phpunit
Eclipse + PHPUnit
• Eclipse Galileo + PDT 2.0
  – http://pkp.sfu.ca/wiki/index.php/Configure_Ecli
    pse_for_PHPUnit
PHPUnit + ietvari?
• Zend
  – Atbalsts jau iekļauts ietvarā
  – http://framework.zend.com/wiki/display/ZFDEV/Testing+St
    andards
• CodeIgniter
  – Atbalsta ietvarā nav (ir slikts), ir 3. puses risinājums
  – http://jensroland.com/projects/toast/
     • (nav PHPUnit, bet esot labs)
  – https://bitbucket.org/kenjis/my-ciunit/overview
  – https://gist.github.com/1142213
• Symfony
  – Ir spraudnis: http://www.symfony-
    project.org/plugins/sfPhpunitPlugin
DARBOŠANĀS
Failu struktūra
• Labā prakse ir katru (īstā) koda klasi likt
  atsevišķā failā
• Katrai klasei "atbilst" ir sava testu kopa
• Tipisks risinājums: saknes katalogā veidot
  apakškatalogu "tests" ar līdzīgu struktūru
  īstajai
  /

  /common_includes        /test
    /database
    /exporters            /common_includes
   /test                    /database
                            /exporters
Testa kopas struktūra
<?php
class ManaKlaseTest extends PHPUnit_Framework_TestCase {
   protected $object; //testējamās klases instance



  protected function setUp() {
         $this->object = new ManaKlase();
  }

  protected function tearDown() {
         unset($this->object);
  }

  public function testMetodesPasauksana() {
         $this->object->PasauktMetodi();
         $this->assert...();
  }
Ko rakstīt testpiemēros
• Katrai metodei raksta vienu vai vairākus
  testpiemērus
• Testpiemērs pasauc kādu funkciju un fiksē
  apgalvojumus, kam jābūt spēkā pēc
  izsaukšanas
• Labais stils – viens apgalvojums uz vienu
  testpiemēru
Apgalvojumu veidi
• visi apgalvojumi ir
  PHPUnit_Framework_TestCase metodes.
  Tāpēc $this->assert..
• assertEquals(what1, what2);
• assertTrue(), assertFalse()
• assertGreaterThan(); assertLessThanOrEqual();
• assertStringStartsWith(); assertSelectRegexp();
• + daudz citu:
 http://www.phpunit.de/manual/3.6/en/writing-tests-for-
 phpunit.html#writing-tests-for-phpunit.assertions
Atkarības
• Var gadīties, ka nav jēgas pildīt testu
  B, kamēr nav veiksmīgs tests A
• Tad testam B lieto atribūtu @depends

/**
* @depends testA
*/
public function testB(){
 }
Datu piegādātāji
• Ir labi veikt testus ar dažādu ievaddatu
  kopu
• Nav prātīgi visus ievaddatus "iešūt kodā"
• "Atpārošana" (decoupling) iespējama,
  izmantojot @dataProvider atribūtu
• Piegādātājs = metode, kas atgriež testa
  datu masīvu
• Piemēros parasti izmanto array(), praksē
  varētu nolasīt no DB.
Datu piegādātāji – piemērs
class DataTest extends PHPUnit_Framework_TestCase
{
   protected static $myData = array(
     array(0, 0, 0),
     array(0, 1, 1),
     array(1, 0, 1),
     array(1, 1, 3)
   );

    public static function provider()
    {
      return self::$myData;
    }

    /**
     * @dataProvider provider
     */
    public function testAdd($a, $b, $c)
    {
        $this->assertEquals($c, $a + $b);
    }
}
Kas traucē vienībtestēšanai?
• Jebkas, kas padara testu specifisku
  konkrētajam izpildes brīdim vai izsaukumam:
• Globālie mainīgie
  – to uzstādīšana traucē veikt tīru testu
• "Singleton" pieeja
  – Ir radniecīgi globālajiem mainīgajiem
• Biznesa darba veikšana konstruktorā
• Atkarība no datiem DB vai failu sistēmā
• Koda konstrukcijas:
  – privātie & aizsargātie mainīgie
KODA PIEMĒRI
@gitHub
• Lekcijā rādītie koda piemēri atrodami šeit:
  – https://github.com/naivists/PHPUnit
PAPILDUS INFO
Vēl var palasīt
• "Ievads PHPUnit", Chris Cornutt
   – Pamati:
      • http://www.sitepoint.com/tutorial-introduction-to-unit-testing-in-
        php-with-phpunit/
   – Assert varianti
      • http://www.sitepoint.com/be-more-asssertive-getting-to-know-
        phpunits-assertions/
   – Mock objekti
      • http://www.sitepoint.com/tutorial-introduction-to-unit-testing-in-
        php-with-phpunit/
• "Labās PHPUnit prakses", Sebastian Bergmann
  (PHPUnit autors)
   – http://www.slideshare.net/sebastian_bergmann/introductio
     n-to-phpunit-best-practices

More Related Content

Featured

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

Featured (20)

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 

Vienībtestēšana (ar PHPUnit)

  • 1. PHP koda vienībtestēšana (ar PHPUnit) Krišs Rauhvargers, 27.02.2012
  • 2. Par kādu testēšanu ir runa? IEVADS
  • 3. Kas ir vienībtestēšana? • Oficiāli: – Metode, ko lieto atsevišķu programmatūras koda daļu pārbaudei, vai tās darbojas saskaņā ar specifikāciju. – Testē mazāko iespējamo koda vienību • klases metodi • moduļa funkciju • Vienkāršotā izpratnē – Testi, ko raksta pats programmētājs
  • 4. Galvenie mērķi • Pārliecināties, ka – kods dara to, kas paredzēts – labojumi kodā (t.sk. refaktorēšana) nesabojā kaut ko citu • Uzlabot koda kvalitāti pirms integrācijas testēšanas • Padarīt kodu uzturamu arī citiem • Automatizācija
  • 5. Vienībtestēšana VS integrācijas testēšana • Vienībtesti nav integrācijas testi! – Integrācijas testi apskata vairāku moduļu sadarbību vai visu sistēmu kopumā – Vienībtests pārbauda katru moduli atsevišķi Vienībtests: - vai šim vītnes platums visur ir vienāds? http://www.bolt-manufacturer.com/picture/hex-bolts/heavy-hex-bolt.jpg Integrācijas tests: - vai ar šo var uzspiest līdz 45? http://inhabitat.com/files/mowercycle23.jpg
  • 6. Ko nozīmē "katru moduli atsevišķi"? • Vienībtestā jācenšas izolēt pārbaudāmo moduli no citiem moduļiem • Kļūdu gadījumā gribam zināt, kas tieši vainīgs • Lai izolētu no pārējiem moduļiem, lieto imitācijas (mock) un aizbāžņus (stub) saistīto moduļu vietā
  • 7. xUnit • xUnit: vienībtestēšanas ietvaru saime dažādām valodām, kas – izmanto programmatiskus testus – lieto vienus un tos pašus jēdzienus • Vēsturiski pirmais ir SUnit (SmallTalk unit testing framework) • Vēlāk arī JUnit (Java), CPPUnit (C++), NUnit (.Net saimes valodas), PHPUnit.
  • 8. xUnit termini • Testu kopa (test suite) – Atsevišķi testi, ko izpilda moduļa funkcionalitātes pārbaudei – Pārbaude kādam koda modulim (piemēram, klasei DateTime būtu testu kopa DateTimeTest) • Testpiemērs (test case) – Tests, ko izpilda kādas funkcionalitātes pārbaudei • Testa konteksts (test fixture) – Datu/vides sagatavošana testu izpildīšanai • Testu izpilde (test execution) – Testu darbināšana dotajā kontekstā • Apgalvojumi (assertions) – Kodā pierakstāmi pieņēmumi, kam jābūt spēkā pirms/pēc koda izpildes • http://www.martinfowler.com/bliki/Xunit.html
  • 9. xUnit testu kopas uzbūve public class SomethingTest inerhits Test { //sagatavošanās ('fixture') public void SetUp() { } //savākšana aiz sevis public void TearDown{ } //paši testi public void TestMethod1(){} public void TestMethod2(){} ... }
  • 10. xUnit testu izpildes principi • Meklē visas testu kopas • Katrā testu kopā meklē visas metodes, kas sākas ar "Test" • Katrai šādai metodei izpilda: SomethingTest->SetUp(); SomethingTest->TestMethod1(); SomethingTest->TearDown(); SomethingTest->SetUp(); SomethingTest->TestMethod2(); SomethingTest->TearDown();
  • 11. Vienībtestēšanas maksimums • Nopietnākais vienībtestēšanas lietojums – testu bāzētā izstrāde (test driven development) – specificē moduļu interfeisus – raksta testus, kas pārbauda šos interfeisus – tikai tad sāk rakstīt pašu kodu • Sākotnēji visi testi būs "izlaisti" vai "failed" • Beigās būs strādājoša sistēma un 100% veiksmīgi testi
  • 13. PHPUnit • PHPUnit ir skriptu komplekts, kas nodrošina – testu izpildi – testu rezultātu attēlošanu – koda pārklājuma analīzi
  • 14. PHPUnit instalēšana • Vieglākais PHPUnit instalēšanas risinājums ir PEAR pakotne pear channel-discover pear.phpunit.de pear channel-discover components.ez.no pear channel-discover pear.symfony-project.com pear install phpunit/PHPUnit • Lai uzstādītu pilnu versiju, vajadzēs arī Xdebug
  • 15. PEAR: kas tas tāds? • PEAR: PHP Extension and Application Repository • Ideja: komdandrindas rīks, kas ļautu instalēt PHP paplašinājumus • Uzlikšana: 1. iedarbina PHP komandrindas interfeisu 2. lejuplādē http://pear.php.net/go-pear.phar 3. php go-pear.phar 4. pārstartē tīmekļa serveri • Var gadīties, ka noder pear upgrade --force PEAR
  • 16. Kas ir Xdebug? • PHP ir skriptēšanas valoda, tas izpildās kāda procesa ietvaros (tīmekļa serverī, komandrindā) – "klasiska" atkļūdošanas pieeja, kur pieslēdzas procesam, būtu sarežģīta • Xdebug ir PHP modulis, kas – darbojas PHP interpretatora iekšienē – uz ārpusi sniedz atkļūdošanas informāciju – darbojas kā HTTP serviss
  • 17. XDebug uzlikšana • Xdebug ir PECL modulis • Instalējams ar PEAR/PECL: – pecl install xdebug • Ini failā papildus: [xdebug] zend_extension=/Applications/XAMPP/xamppfiles/lib/php/php- 5.3.1/extensions/no-debug-non-zts-20090626/xdebug.so xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000
  • 18. PEAR uz XAMPP/Wamp • XAMPP – Jaunākās versijas ir ar PEAR, – Xdebug jāinstalē pašiem • WampSever – Vecākās versijās PEAR var būt jāliek pašiem – Xdebug vajadzētu būt
  • 19. Xdebug atbalsts • NetBeans – kopš 6.versijas integrēts atbalsts • Notepad++ var iekonfigurēt: – http://dowdrake.com/showthread.php?343- Xdebug-with-WAMPServer-and-Notepad
  • 21. NetBeans iekonfigurēšana (2) Vienībtestēšana: prefrences / unit testing Piedāvā meklēt phpunit.sh, patiesībā saucas phpunit
  • 22. Eclipse + PHPUnit • Eclipse Galileo + PDT 2.0 – http://pkp.sfu.ca/wiki/index.php/Configure_Ecli pse_for_PHPUnit
  • 23. PHPUnit + ietvari? • Zend – Atbalsts jau iekļauts ietvarā – http://framework.zend.com/wiki/display/ZFDEV/Testing+St andards • CodeIgniter – Atbalsta ietvarā nav (ir slikts), ir 3. puses risinājums – http://jensroland.com/projects/toast/ • (nav PHPUnit, bet esot labs) – https://bitbucket.org/kenjis/my-ciunit/overview – https://gist.github.com/1142213 • Symfony – Ir spraudnis: http://www.symfony- project.org/plugins/sfPhpunitPlugin
  • 25. Failu struktūra • Labā prakse ir katru (īstā) koda klasi likt atsevišķā failā • Katrai klasei "atbilst" ir sava testu kopa • Tipisks risinājums: saknes katalogā veidot apakškatalogu "tests" ar līdzīgu struktūru īstajai / /common_includes /test /database /exporters /common_includes /test /database /exporters
  • 26. Testa kopas struktūra <?php class ManaKlaseTest extends PHPUnit_Framework_TestCase { protected $object; //testējamās klases instance protected function setUp() { $this->object = new ManaKlase(); } protected function tearDown() { unset($this->object); } public function testMetodesPasauksana() { $this->object->PasauktMetodi(); $this->assert...(); }
  • 27. Ko rakstīt testpiemēros • Katrai metodei raksta vienu vai vairākus testpiemērus • Testpiemērs pasauc kādu funkciju un fiksē apgalvojumus, kam jābūt spēkā pēc izsaukšanas • Labais stils – viens apgalvojums uz vienu testpiemēru
  • 28. Apgalvojumu veidi • visi apgalvojumi ir PHPUnit_Framework_TestCase metodes. Tāpēc $this->assert.. • assertEquals(what1, what2); • assertTrue(), assertFalse() • assertGreaterThan(); assertLessThanOrEqual(); • assertStringStartsWith(); assertSelectRegexp(); • + daudz citu: http://www.phpunit.de/manual/3.6/en/writing-tests-for- phpunit.html#writing-tests-for-phpunit.assertions
  • 29. Atkarības • Var gadīties, ka nav jēgas pildīt testu B, kamēr nav veiksmīgs tests A • Tad testam B lieto atribūtu @depends /** * @depends testA */ public function testB(){ }
  • 30. Datu piegādātāji • Ir labi veikt testus ar dažādu ievaddatu kopu • Nav prātīgi visus ievaddatus "iešūt kodā" • "Atpārošana" (decoupling) iespējama, izmantojot @dataProvider atribūtu • Piegādātājs = metode, kas atgriež testa datu masīvu • Piemēros parasti izmanto array(), praksē varētu nolasīt no DB.
  • 31. Datu piegādātāji – piemērs class DataTest extends PHPUnit_Framework_TestCase { protected static $myData = array( array(0, 0, 0), array(0, 1, 1), array(1, 0, 1), array(1, 1, 3) ); public static function provider() { return self::$myData; } /** * @dataProvider provider */ public function testAdd($a, $b, $c) { $this->assertEquals($c, $a + $b); } }
  • 32. Kas traucē vienībtestēšanai? • Jebkas, kas padara testu specifisku konkrētajam izpildes brīdim vai izsaukumam: • Globālie mainīgie – to uzstādīšana traucē veikt tīru testu • "Singleton" pieeja – Ir radniecīgi globālajiem mainīgajiem • Biznesa darba veikšana konstruktorā • Atkarība no datiem DB vai failu sistēmā • Koda konstrukcijas: – privātie & aizsargātie mainīgie
  • 34. @gitHub • Lekcijā rādītie koda piemēri atrodami šeit: – https://github.com/naivists/PHPUnit
  • 36. Vēl var palasīt • "Ievads PHPUnit", Chris Cornutt – Pamati: • http://www.sitepoint.com/tutorial-introduction-to-unit-testing-in- php-with-phpunit/ – Assert varianti • http://www.sitepoint.com/be-more-asssertive-getting-to-know- phpunits-assertions/ – Mock objekti • http://www.sitepoint.com/tutorial-introduction-to-unit-testing-in- php-with-phpunit/ • "Labās PHPUnit prakses", Sebastian Bergmann (PHPUnit autors) – http://www.slideshare.net/sebastian_bergmann/introductio n-to-phpunit-best-practices