Buscar..
Pruebas simples en Symfony3
Prueba de unidad
Las pruebas unitarias se utilizan para asegurarse de que su código no tenga un error de sintaxis y para probar la lógica de su código para que funcione como lo esperaba. Ejemplo rápido:
src / AppBundle / Calculator / BillCalculator.php
<?php namespace AppBundle\Calculator; use AppBundle\Calculator\TaxCalculator; class BillCalculator { private $taxCalculator; public function __construct(TaxCalculator $taxCalculator) { $this->taxCalculator = $taxCalculator; } public function calculate($products) { $totalPrice = 0; foreach ($products as $product) { $totalPrice += $product['price']; } $tax = $this->taxCalculator->calculate($totalPrice); return $totalPrice + $tax; } }
src / AppBundle / Calculator / TaxCalculator.php
<?php namespace AppBundle\Calculator; class TaxCalculator { public function calculate($price) { return $price * 0.1; // for example the tax is 10% } }
tests / AppBundle / Calculator / BillCalculatorTest.php
<?php namespace Tests\AppBundle\Calculator; class BillCalculatorTest extends \PHPUnit_Framework_TestCase { public function testCalculate() { $products = [ [ 'name' => 'A', 'price' => 100, ], [ 'name' => 'B', 'price' => 200, ], ]; $taxCalculator = $this->getMock(\AppBundle\Calculator\TaxCalculator::class); // I expect my BillCalculator to call $taxCalculator->calculate once // with 300 as the parameter $taxCalculator->expects($this->once())->method('calculate')->with(300)->willReturn(30); $billCalculator = new BillCalculator($taxCalculator); $price = $billCalculator->calculate($products); $this->assertEquals(330, $price); } }
Probé mi clase BillCalculator para asegurarme de que mi BillCalculator devolverá el precio total de los productos + 10% de impuestos. En prueba de unidad, creamos nuestro propio caso de prueba. En esta prueba, proporciono 2 productos (los precios son 100 y 200), por lo que el impuesto será del 10% = 30. Espero que la calculadora de impuestos devuelva 30, por lo que el precio total será 300 + 30 = 330.
Prueba funcional
Las pruebas funcionales se utilizan para probar la entrada y la salida. Con la entrada dada, esperaba alguna salida sin probar el proceso para crear la salida. (Esto es diferente con la prueba de unidad porque en la prueba de unidad, probamos el flujo de código). Ejemplo rápido:
namespace Tests\AppBundle; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class ApplicationAvailabilityFunctionalTest extends WebTestCase { /** * @dataProvider urlProvider */ public function testPageIsSuccessful($url) { $client = self::createClient(); $client->request('GET', $url); $this->assertTrue($client->getResponse()->isSuccessful()); } public function urlProvider() { return array( array('/'), array('/posts'), array('/post/fixture-post-1'), array('/blog/category/fixture-category'), array('/archives'), // ... ); } }
Probé mi controlador para asegurarme de que mi controlador devolverá 200 respuestas en lugar de 400 (No encontrado) o 500 (Error interno del servidor) con la url dada.
Referencias:
- http://symfony.com/doc/current/best_practices/tests.html
- http://symfony.com/doc/current/book/testing.html