Sök…


Enkel testning i Symfony3

Enhetstest

Enhetstest används för att säkerställa att din kod inte har något syntaxfel och för att testa logiken för din kod för att fungera som vad du förväntade dig. Snabbt exempel:

src / AppBundle / kalkylator / 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 / Miniräknare / TaxCalculator.php

<?php

namespace AppBundle\Calculator;

class TaxCalculator
{
    public function calculate($price)
    {
        return $price * 0.1; // for example the tax is 10%
    }
}

test / AppBundle / kalkylator / 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);
    }
}

Jag testade min BillCalculator-klass så att jag kan säkerställa att min BillCalculator returnerar det totala produktpriset + 10% skatt. I enhetstest skapar vi vårt eget testfall. I det här testet tillhandahåller jag två produkter (priserna är 100 och 200), så skatten kommer att vara 10% = 30. Jag förväntar mig att TaxCalculator ska returnera 30, så att det totala priset blir 300 + 30 = 330.

Funktionellt test

Funktionella tester används för att testa ingång och utgång. Med den angivna inputen förväntade jag mig lite output utan att testa processen för att skapa output. (detta är annorlunda med enhetstest eftersom vi i enhetstest testar kodflödet). Snabbt exempel:

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'),
            // ...
        );
    }
}

Jag testade min controller så att jag kan se till att min controller kommer att returnera 200 svar istället för 400 (Not Found) eller 500 (Internal Server Error) med den angivna url.

referenser:



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow