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

TDD

Christian
October 26, 2012

 TDD

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

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()); }