Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mocks, Stubs, Tests

Mocks, Stubs, Tests

Alexandre Salomé

November 24, 2011
Tweet

More Decks by Alexandre Salomé

Other Decks in Programming

Transcript

  1. • • – • – • – • Le format

    des tests dépend du sujet
  2. Quand je casserais quelque chose Elle ne me ralentira pas

    dans mon travail Le code coverage sera de 100%
  3. Quand je casserais quelque chose Elle ne me ralentira pas

    dans mon travail Le code coverage sera de 100%
  4. class PHPTourTest extends PHPUnit_Framework_TestCase { public function testForCoverage() { $tour

    = new PHPTour(); $tour->totalCost = 40000; $tour->attendees = 100; $this->assertEquals(400, $tour->getPlacePrice()); } }
  5. class PHPTourTest extends PHPUnit_Framework_TestCase { public function testForCoverage() { $tour

    = new PHPTour(); $tour->totalCost = 40000; $tour->attendees = 100; $this->assertEquals(400, $tour->getPlacePrice()); } }
  6. <?php class CodeCoverage { private $field1; // … private $fieldN;

    // … private $field30; // Powerpoint coding standards public function setFieldN($n) { $this->fieldn = $n; } public function getFieldN() { return $this->fieldN; } }
  7. <?php class CodeCoverage { // … public function compute() {

    $troll = $field1 * $field2 / (($field3 * $field4) * $field5) * $field6 / $field7 * $field8; $troll2 = $field9 * $field10 / cos($field11); $troll3 = $field12 * tan($field13); return $troll * log($troll2) / sin($troll3) * $field14 /* (;;)(^_^)(;;) */; } }
  8. <?php class CodeCoverageTest extends PHPUnit_Framework_TestCase { public function testSetField1AndGetField1ReturnsCorrectValue() {

    $cc = new CodeCoverage(); $cc->setField1(’fuu'); $this->assertEquals(’fuu', $cc->getField1()); } // repeat for each fields }
  9. <?php class SausageShop { public function serve() { $sausage =

    SausageFactory::getNewSausage(); $bread = BreadFactory::getNewBread(); return $bread->upgradeWith($sausage); } }
  10. <?php class SausageShop { public function serve() { $sausage =

    SausageFactory::getNewSausage(); $bread = BreadFactory::getNewBread(); return $bread->upgradeWith($sausage); } }
  11. <?php class SausageShop { public function __construct( SausageFactory $sausageFactory, BreadFactory

    $breadFactory ) { $this->sausageFactory = $sausageFactory; $this->breadFactory = $breadFactory; } public function serve() { $sausage = $this->sausageFactory->getNewSausage(); $bread = $this->breadFactory->getNewBread(); return $bread->upgradeWith($sausage); } }
  12. <?php class SausageShop { public function __construct( SausageFactory $sausageFactory, BreadFactory

    $breadFactory ) { $this->sausageFactory = $sausageFactory; $this->breadFactory = $breadFactory; } public function serve() { $sausage = $this->sausageFactory->getNewSausage(); $bread = $this->breadFactory->getNewBread(); return $bread->upgradeWith($sausage); } }
  13. <?php class Customer { public function orderBeer() { $url =

    'http://waiter/bring-me-a- beer/erdinger'; return file_get_contents($url); } }
  14. <?php class Customer { public function orderBeer() { $url =

    'http://waiter/bring-me-a- beer/erdinger'; return file_get_contents($url); } }
  15. <?php abstract class BaseMedia { const TYPE_IMAGE; abstract public function

    getFile(); public function getType() { switch (get_extension($this->getFile())) { case 'png‘: return self::TYPE_IMAGE; } }
  16. <?php abstract class BaseMedia { const TYPE_IMAGE; abstract public function

    getFile(); public function getType() { switch (get_extension($this->getFile())) { case 'png‘: return self::TYPE_IMAGE; } }
  17. <?php class MyClassTest extends PHPUnit_Framework_TestCase { public function testFoo() {

    $engine = $this->getMock('Engine'); $car = new Car($engine); } } Tous les appels à Engine renverront « null » En fait… c‘est un stub
  18. <?php namespace Sensio\Bundle\PlatformBundle\OAuth; use Symfony\Component\HttpFoundation\Session; class OAuthClient { // …

    properties declaration … public function __construct($serviceName, \OAuth $oauth, $endPoint, $authorizeUri, $requestTokenUri, $accessTokenUri, Session $session = null) { $this->serviceName = $serviceName; $this->oauth = $oauth; $this->endPoint = $endPoint; $this->authorizeUri = $authorizeUri; $this->requestTokenUri = $requestTokenUri; $this->accessTokenUri = $accessTokenUri; $this->session = $session; $this->sessionOAuthTokenName = sprintf('oauth/_%s.oauth_token', $this->serviceName); $this->sessionOAuthTokenSecretName = sprintf('oauth/_%s.oauth_token_secret', $this->serviceName); } // … other methods …
  19. public function getRequestToken($redirectUri = null) { if ($this->session) { $this->session->remove($this->sessionOAuthTokenName);

    $this->session->remove($this->sessionOAuthTokenSecretName); } $requestToken = $this->oauth->getRequestToken( $this->requestTokenUri, $redirectUri); if ($requestToken === false) { throw new \OAuthException('Failed fetching request token, response was: ’ .$this->oauth->getLastResponse()); } if ($this->session) { $this->session->set($this->sessionOAuthTokenName, $requestToken['oauth_token']); $this->session->set($this->sessionOAuthTokenSecretName, $requestToken['oauth_token_secret']); } return $requestToken; }
  20. public function retrieveAccessToken($oauthSessionHandle = '', $verifierToken) { if ($this->session) {

    if (($token = $this->session->get($this->sessionOAuthTokenName)) && ($tokenSecret = $this->session->get( $this->sessionOAuthTokenSecretName)) ) { $this->oauth->setToken($token, $tokenSecret); } } $response = $this->oauth->getAccessToken($this->accessTokenUri, $oauthSessionHandle, $verifierToken); if (false === $response) { throw new \OAuthException('Failed fetching access token, response was: '. $this->oauth->getLastResponse()); } return $response; } }
  21. public function setToken($token, $tokenSecret) { $this->oauth->setToken($token, $tokenSecret); } public function

    get($path) { $url = sprintf('%s/%s', $this->endPoint, ltrim($path, '/')); $state = $this->oauth->fetch($url); if (!$state) { throw new \RuntimeException(sprintf(Can\’t fetch resource %s', $url)); } return $this->oauth->getLastResponse(); }
  22. class myTest extends PHPUnit_Framework_TestCase { public function testGetRequestToken() { $oauth

    = $this->getMock('OAuth'); $oauth ->expects($this->once()) ->method('getRequestToken') ->will($this->returnValue('ok')) ; $client = new OAuthClient( 'foo', $oauth, 'bar', 'bar', 'bar', 'bar', 'bar'); $this->assertEquals('ok', $client->getRequestToken()); } }
  23. class myTest extends PHPUnit_Framework_TestCase { /** @expectedException LogicException */ public

    function testGetRequestTokenWithError() { $oauth = $this->getMock('OAuth'); $oauth ->expects($this->once()) ->method('getRequestToken') ->will($this->returnValue(false)); $client = new OAuthClient('foo', $oauth, 'bar', 'bar', 'bar', 'bar', 'bar'); $client->getRequestToken(); } }