Your SlideShare is downloading. ×
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Unit and Functional Testing with Symfony2

30,235

Published on

Published in: Technology
4 Comments
40 Likes
Statistics
Notes
No Downloads
Views
Total Views
30,235
On Slideshare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
371
Comments
4
Likes
40
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Unit & Functional Tests Fabien Potencier
  • 2. Standardization
  • 3. PHPUnit 3.5
  • 4. Best practices
  • 5. AllTests.php
  • 6. phpunit.xml(.dist) <phpunit backupGlobals="false" backupStaticAttributes="false" colors="false" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="true" stopOnFailure="false" syntaxCheck="false" bootstrap="../src/autoload.php" >
  • 7. <testsuites> <testsuite name="Project Test Suite"> <directory> ../src/Application/*/Tests </directory> </testsuite> </testsuites>
  • 8. <filter> <whitelist> <directory>../src/Application</directory> <exclude> <directory> ../src/Application/*/Resources </directory> <directory> ../src/Application/*/Tests </directory> </exclude> </whitelist> </filter>
  • 9. Application/ HelloBundle/ Model/ Article.php Tests/ Model/ ArticleTest.php Application/Tests/Model/ArticleTest.php
  • 10. $ phpunit –c hello/
  • 11. $ cd hello/ $ phpunit
  • 12. $ phpunit -c hello/ src/Application/HelloBundle/ $ phpunit -c hello/ src/Application/HelloBundle/ Tests/Controller/HelloControllerTest.php
  • 13. $ cd hello/ $ phpunit --coverage-html=cov/
  • 14. Standard artifacts --coverage-clover=clover.xml --log-junit=junit.xml
  • 15. Functional Tests
  • 16. Do not write Unit Tests for a Controller
  • 17. namespace ApplicationHelloBundleTestsController; use SymfonyFrameworkWebBundleTestWebTestCase; class HelloControllerTest extends WebTestCase { public function testIndex() { $client = $this->createClient(); $crawler = $client->request( 'GET', '/hello/Fabien'); $this->assertTrue($crawler->filter( 'html:contains("Hello Fabien")')->count()); } }
  • 18. $client = $this->createClient(); $crawler = $client->request( 'GET', '/hello/Fabien'); $this->assertTrue($crawler->filter( 'html:contains("Hello Fabien")')->count());
  • 19. Environment Debug mode $this->createClient('test', true);
  • 20. # hello/config/config_test.yml imports: - { resource: config_dev.yml } web.config: toolbar: false zend.logger: priority: debug kernel.test: ~
  • 21. The Client makes requests to the Symfony2 application The Crawler parses the Response to allow navigation The PHPUnit Assertions tests the Response
  • 22. Assertions
  • 23. $this->assertEquals( 10, $crawler->filter('div.hentry')->count()); $this->assertTrue( $client->getResponse()->isSuccessful());
  • 24. The Client / The Crawler
  • 25. $crawler = $client->request( 'GET', 'hello/Lucas' );
  • 26. $link = $crawler->selectLink("Greet Lucas"); $client->click($link);
  • 27. $form = $crawler->selectButton('submit'); $client->submit($form, array( 'name' => 'Lucas', 'country' => 'France', 'like_symfony' => true, 'photo' => '/path/to/lucas.jpg', ));
  • 28. $harry = $this->createClient(); $sally = $this->createClient(); $harry->request('POST', '/say/sally/Hello'); $sally->request('GET', '/messages'); $this->assertEquals(201, $harry->getResponse()->getStatusCode()); $this->assertRegExp('/Hello/', $sally->getResponse()->getContent());
  • 29. $harry = $this->createClient(); $sally = $this->createClient(); $harry->insulate(); $sally->insulate(); $harry->request('POST', '/say/sally/Hello'); $sally->request('GET', '/messages'); $this->assertEquals(201, $harry->getResponse()->getStatusCode()); $this->assertRegExp('/Hello/', $sally->getResponse()->getContent());
  • 30. Main PHP Process 1 4 $harry = $this->createClient(); $this->assertEquals(201, $sally = $this->createClient(); $harry->getResponse()->getStatusCode()); $this-­‐>assertRegExp('/Hello/',   $harry->insulate();    $sally-­‐>getResponse()-­‐>getContent());   $sally->insulate(); 2 Forked PHP Process $harry->request('POST', '/say/sally/Hello'); 3 Forked PHP Process $sally-­‐>request('GET',  '/messages');
  • 31. Main PHP Process 1 3 $harry = $this->createClient(); $sally->request('GET', '/messages'); $sally = $this->createClient(); $this->assertEquals(201, $harry->insulate(); $harry->getResponse()->getStatusCode()); $this-­‐>assertRegExp('/Hello/',      $sally-­‐>getResponse()-­‐>getContent());   2 Forked PHP Process $harry->request('POST', '/say/sally/Hello');
  • 32. Simulate or use HTTP
  • 33. $response = $client->getResponse(); $profiler = $this->getProfiler($response); if ($profiler) { $this->assertEquals(2, $profiler['db']->getQueryCount()); $this->assertEquals('blog_post', $profiler['app']->getRoute()); $this->assertTrue( $profiler['timer']->getTime() < 0.5); }
  • 34. Questions?
  • 35. Sensio S.A. 92-98, boulevard Victor Hugo 92 115 Clichy Cedex FRANCE Tél. : +33 1 40 99 80 80 Contact Fabien Potencier fabien.potencier at sensio.com http://www.sensiolabs.com/ http://www.symfony-project.org/ http://fabien.potencier.org/

×