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

Unit Testing by Example

Anna Filina
February 26, 2014

Unit Testing by Example

Everyone tells you that you need to write tests. You tried it, but your tests ended up not very useful and consumed valuable time. What to test? What conditions to write? Through realistic examples, this presentation will take you from var_dump() and ease you into the testing business. All this without losing sight of the tight deadlines. You will come out of this presentation with a renewed interest in writing unit tests.

Anna Filina

February 26, 2014
Tweet

More Decks by Anna Filina

Other Decks in Technology

Transcript

  1. FooLab Anna Filina 3 • I help projects ship on

    time. • I train and mentor developers. • I code and optimize.
  2. FooLab Step 1: found bug $item = new CartItem("Skyrim", 30);

    $item->setQuantity(0.1); $this->assertEquals(1, $item->getQuantity()); === public function setQuantity($qty) { $this->qty = ceil($qty); } 6
  3. FooLab Step 2: improve code $item = new CartItem("Skyrim", 30);

    $item->setQuantity(2); $cart->addItem($item); $this->assertEquals(0, $cart->getShipping()); $this->assertEquals(60, $cart->getTotal()); 7
  4. FooLab Step 2: improve code public function getShipping() { if

    ($this->getSubtotal() >= 40) { return 0; } else { return 15; } } 8
  5. FooLab Test both cases $item = new CartItem("Skyrim", 30); $item->setQuantity(1);

    $cart->addItem($item); $this->assertEquals(15, $cart->getShipping()); $this->assertEquals(45, $cart->getTotal()); 9
  6. FooLab Step 3: write code public function getTotal() { ...

    $taxes = $this->getApplicableTaxes(); foreach ($taxes as $tax) { $total += $subtotal * $tax->getPercent(); } ... } 10
  7. FooLab Step 3: write code array (size=2) 0 => array

    (size=2) 'name' => string 'GST' (length=3) 'percent' => float 0.5 1 => array (size=2) 'name' => string 'QST' (length=3) 'percent' => float 0.9975 11
  8. FooLab Step 3: write code $cart = new Cart(); $taxes

    = $cart->getApplicableTaxes(); $this->assertInternalType('array', $taxes); $this->assertCount(2, $taxes); $gst = $taxes[0]; $this->assertEquals(0.5, $gst->getPercent()); 12
  9. FooLab Step 4: before (TDD) $import = new CatalogImport(); $products

    = $import->parseFromCsv('test_catalog.csv'); $this->assertInternalType('array', $products); $this->assertCount(2, $products); $this->assertArrayHasKey('name', products[0]); $this->assertArrayHasKey('price', products[0]); 14
  10. FooLab Tips • How it’s not supposed to work. •

    Plan for exceptions. • Focus on realistic scenarios. 15
  11. FooLab Recap • Testing takes practice • Write tests when

    you see a bug • Write tests when you improve code • Write tests as you write new code • Write tests before you write code • Test unexpected scenarios 16