Suche…


Einfaches Testen in Symfony3

Gerätetest

Komponententests werden verwendet, um sicherzustellen, dass Ihr Code keinen Syntaxfehler enthält, und um zu testen, dass die Logik Ihres Codes so funktioniert, wie Sie es erwartet haben. Schnelles Beispiel:

src / AppBundle / Rechner / 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 / Rechner / 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);
    }
}

Ich habe meine BillCalculator-Klasse getestet, um sicherzustellen, dass mein BillCalculator den Gesamtpreis der Produkte + 10% zurückgibt. Im Komponententest erstellen wir unseren eigenen Testfall. In diesem Test stelle ich 2 Produkte zur Verfügung (die Preise sind 100 und 200), also beträgt die Steuer 10% = 30.

Funktionstest

Funktionstests werden zum Testen der Eingabe und Ausgabe verwendet. Mit der gegebenen Eingabe erwartete ich etwas Ausgabe, ohne den Prozess zu testen, um die Ausgabe zu erstellen. (Dies ist beim Einheitentest anders, weil wir beim Codetest den Code-Fluss testen). Schnelles Beispiel:

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

Ich habe meinen Controller getestet, damit ich sicherstellen kann, dass mein Controller mit der angegebenen URL 200 statt 400 (Not Found) oder 500 (Internal Server Error) zurückgibt.

Verweise:



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow