Kostra testované aplikace
Jaroslav HraničkaStále tápete, jak vytvořit základní kostru aplikace, kde je Composer vč. autoloaderu a máte i testy? Podíváme se na to, že to je velmi jednoduché.
Co budeme dělat?
Vytvoříme se primitivní kalkulačku (která umí pouze sčítat celá čísla). A k tomu si napíšeme test, jestli sčítá správně.
Povedu Vás krok po kroku. Článek je určen pro začátečníky na Windows. Předpokládám ale, že:
- máte nainstalované PHP 7 (třeba s XAMPP), Composer, nějaké IDE (třeba PhpStorm), Git a umíte to vše, alespoň trochu, použít.
Pokud s něčím budete mít problémy, podělte se v diskuzi dole pod článkem. Rádi poradíme.
První krůčky - založení projektu
Začnu od píky. A provedu Vás po bodech.
- 
Spusťte si Git Bash a vytvořte adresář pro web: cd C:\xampp\htdocs mkdir test-project cd test-project
- 
Uvnitř nového adresáře inicializujte Git: git init
- 
Otevřete si adresář ve svém oblíbeném IDE. 
- 
Vytvořte si nový .gitignoresoubor a zakažte verzovánívendor(právě ten adresář si bude spravovat Composer)vendorJestliže zastáváte názor, že se i vendor verzuje, klidně si jej zaverzujte. V tom případě tenhle krok zkrátka ignorujte. 
- 
Přidejte si composer.jsona vyžádejte si PHPUnit, abyste mohli psát testy a nastavte si autoloader tak, aby se načítaly používané třídy:{ "name": "example/test-project", "description": "Test Project", "minimum-stability": "stable", "license": "MIT", "authors": [ { "name": "author's name", "email": "email@example.com" } ], "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "autoload": { "psr-4": { "App\\": "src" } } }
- 
Nainstalujte si závislosti spuštěním composer install.
- 
Nakonec si vytvořte adresář srca v něm souborCalculator.php. Jeho obsah bude zatím následující:<?php namespace App; class Calculator { public function sum(int $a, int $b): int { } }
- 
Vše si commitněte: git add -A git commit -m "Initial commit"
Tímto máte základní aplikaci. Zatím žádné testy. Jen naprosté minimum.
Přidáme tam testy
V projektu již máme připravený testovací framework (PHPUnit) a kostru třídy, kterou máme implementovat (Calculator). Nyní tomu přidáme testy a naimplementujme funkci.
- 
Vytvořte si adresář testsa do něj předejte zaváděcí soubor, který zajistí autoloading. Pojmenujte jejbootstrap.phpa jeho obsah bude:<?php require_once __DIR__ . '/../vendor/autoload.php';Do tohoto souboru můžete později přidat další kód který by Vaše testovaná aplikace vyžadovala (třeba vypnutí cache apod.). 
- 
V rootu aplikace si vytvořte soubor phpunit.xml. To je konfigurační soubor pro testovací framework. Zde nadefinujeme cestu k testům a našemu bootstrapu:<?xml version="1.0"?> <phpunit bootstrap="tests/bootstrap.php" verbose="true" > <!-- tests directories to run --> <testsuites> <testsuite> <directory suffix="Test.php">tests</directory> </testsuite> </testsuites> </phpunit>
- 
Pak si vytvořte uvnitř složky testssouborCalculatorTest.php. To bude právě test naší kalkulačky. Jednoduchý testovací případ může vypadat takto:<?php namespace Tests\App; use PHPUnit\Framework\TestCase; class CalculatorTest extends TestCase { public function testSum() { $calculator = new Calculator(); $this->assertSame(0, $calculator->sum(0, 0)); $this->assertSame(99, $calculator->sum(50, 49)); $this->assertSame(-99, $calculator->sum(-100, 1)); } }Do této složky můžete psát další a další testy. Podmínkou je pouze to, aby názvy souborů končily na Test.php- jak jsme si nastavili v konfiguračním souboru.
- 
Spusťte si testy. Lze to udělat jednoduše v IDE nebo přes příkazový řádek: php vendor/bin/phpunitNení nutné nic více nastavovat, jelikož si PHPUnit sám načte konfiguraci definovanou uvnitř phpunit.xmlv rootu aplikace.Testy skončí chybou, jelikož funkce ještě není naimplementována. 
- 
Naimplementujte kalkulačku. Soubor src/Calculator.phpmůže vypadat takto:<?php namespace App; class Calculator { public function sum(int $a, int $b): int { return $a + $b; } }
Commit
A je to hotovo. Mám vytvořenou kostru aplikace, kde mám Composer a prostředí pro testy.
To je vše co jsem chtěl ukázat. Nyní byste již neměli mít problém založit nový projekt a rovnou u něj psát testy.