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

TDD

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Christian Christian
October 26, 2012

 TDD

Presentación acerca de TDD para el betabeers de Barcelona (26/10/2012)

Avatar for Christian

Christian

October 26, 2012
Tweet

More Decks by Christian

Other Decks in Programming

Transcript

  1. Christian Soronellas Soy desarrollador web Windsurf y surf en mi

    tiempo libre :) Trabajo en emagister Me encanta la comunidad OpenSource @theUniC github.com/theUniC
  2. Objetivos · Introducción a la metodología · Caso de uso

    práctico · Tips & Best-practices para hacer unit-test con #rigor @theUniC
  3. TDD · Es una metodología de diseño de software @theUniC

    · Usa test-first cómo punto de entrada
  4. TDD · Es una metodología de diseño de software @theUniC

    · Usa test-first cómo punto de entrada · Usa refactoring para eliminar la duplicidad de código
  5. TDD · Es una metodología de diseño de software @theUniC

    · Usa test-first cómo punto de entrada · Usa refactoring para eliminar la duplicidad de código · Usa baby-steps para desgranar problemas complejos
  6. TDD · Es una metodología de diseño de software @theUniC

    · Usa test-first cómo punto de entrada · Usa refactoring para eliminar la duplicidad de código · Usa baby-steps para desgranar problemas complejos · Es ideal para usarse conjuntamente con unit-tests.
  7. “ Dado un número entero positivo n, el factorial se

    define como el producto de todos los números enteros positivos desde 1 hasta n wikipedia
  8. “De acuerdo con la convención matemática de producto vacío, el

    valor de 0! debe definirse como 0! = 1. wikipedia
  9. n! = 1 · 2 · 3 · 4 ·

    ... · (n - 1) · n
  10. n! = 1 · 2 · 3 · 4 ·

    ... · (n - 1) · n 5! = 1 · 2 · 3 · 4 · 5 // 120 4! = 1 · 2 · 3 · 4 // 24 0! = 1
  11. ~$ phpunit PHPUnit 3.7.8 by Sebastian Bergmann. Configuration read from

    phpunit.xml.dist PHP Fatal error: Class 'FactorialNumber' not found in FactorialNumberTest.php on line 12 PHP Stack trace: ...
  12. public function testFactorialNumber() { $fn = new FactorialNumber(); $this->assertEquals(1, $fn->factorial(0));

    $this->assertEquals(24, $fn->factorial(4)); $this->assertEquals(120, $fn->factorial(5)); }
  13. class FactorialNumber { public function factorial($n) { if (0 ==

    $n) return 1; else { if (4 == $n) return 24; return 120; } } }
  14. class FactorialNumber { public function factorial($n) { if (0 ==

    $n) return 1; else { if (4 == $n) return 24; return 120; } } }
  15. class FactorialNumber { public function factorial($n) { if (0 ==

    $n) return 1; else { if (4 == $n) return (4 * 3 * 2 * 1); return (5 * 4 * 3 * 2 * 1); } } }
  16. class FactorialNumber { public function factorial($n) { if (0 ==

    $n) return 1; else { if (4 == $n) return (4 * 3 * 2 * 1); return 5 * $this->factorial(4); } } }
  17. class FactorialNumber { public function factorial($n) { if (0 ==

    $n) return 1; return $n * $this->factorial($n - 1); } }
  18. class UsersDao { private $db; public function __construct(DBConnection $db) {

    $this->db = $db; } public function findByEmail($email) { $sql = sprintf(‘SELECT * FROM users u WHERE email = “%s”’, $email); $result = $this->db->query($sql); return new User($result); } }
  19. public function testFindByEmail() { $db = new DBConnection('127.0.0.1', ‘testuser’, ‘p4ssw0rd’,

    ‘dbname’); $usersDao = new UsersDao($db); $user = $usersDao->findByEmail(‘[email protected]’); $this->assertEquals(‘[email protected]’, $user->getEmail()); }
  20. public function testFindByEmail() { $queryResult = array( ‘id’ => 1,

    ‘email’ => ‘[email protected]’, ‘password’ => ‘***’ ); $pdoMock = $this->getMock(‘DBConnection’, array(‘query’)); $pdoMock ->expects($this->once()) ->method(‘query’) ->with( $this->equalTo(‘SELECT * FROM users u WHERE email = “[email protected]”’) ) ->will($this->returnValue($queryResult)) ; $usersDao = new UsersDao($pdoMock); $user = $usersDao->findByEmail(‘[email protected]’); $this->assertInstanceOf($user, ‘MyUserClass’); $this->assertEquals(‘[email protected]’, $user->getEmail()); }